/*alert("strom vne core nula")*/

var Core = {};
//model W3C DOM Events
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();
	};
}
//Model Internet explorer Events
//kvuli ladeni docasne vymazano
else if (document.attachEvent)
{
	Core.addEventListener = function(target, type, listener)
	{
	
		//zabrani tomu, aby se stejnu posluchac pridal dvakrat, protoze DOM 2
		//Events ignoruje duplikaty jako je tento
		if (Core._findListener(target, type, listener) != -1 ) return;

		//listener 2 vola listener jednim ze dvou zpusobu,
		//v zavislosti na tom, co podporuje tato verze IE,
		// a preda do listener jako argument globalni objekt event
	
		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;
			}

		};	
		//prida posluchace listener2 metodou attachEvent IE
		target.attachEvent("on" + type, listener2);
		//vytvori objekt popisujici tohoto posluchace, takze ho
		//budeme moci pozdeji uklidit
		var listenerRecord =
		{
    target: target, type: type, listener: listener, listener2: listener2
    };
    // ziska odkaz na objekt okna popisujiciho target
    var targetDocument = target.document || target;
    var targetWindow = targetDocument.parentWindow;
    //Vytvori pro tohoto posluchace jedinecny ID
    var listenerId = "l" + Core._listenerCounter++;
    //ulozi zaznam tohoto posluchace do objektu okna
    if (!targetWindow._allListeners)
    targetWindow._allListeners = {};
    targetWindow._allListeners[listenerId] = listenerRecord;
    //ulozi ID tohoto posluchace do target
    if (!target._listeners) target._listeners = [];
    target._listeners[target._listeners.length] = listenerId;
    //nastavi Core._removeAllListeners, aby nakonec uklidila vsechny posluchace
    if (!targetWindow._unloadListenerAdded)
    {
      targetWindow._unloadListenerAdded = true;
      targetWindow.attachEvent("onunload", Core._removeAllListeners);
    }
   };
   Core.removeEventListener = function(target, type, listener)
   {
    //zjisti, zda byl posluchac listener skutecne pridan k target
    var listenerIndex = Core._findListener (target, type, listener);
    if (listenerIndex == -1) return;
   //ziska odkaz na objekt okna obsahujiciho target
   var targetDocument = target.document || target;
   var targetWindow = targetDocument.parentWindow;
   // obdrzi zaznam posluchace z objektu okna
   var listenerId = target._listeners[listenerIndex];
   var listenerRecord = targetWindow._allListeners[listenerId];
   // odstrani posluchace a odstrani jeho ID y target
   target.detachEvent ("on" + type, listenerRecord.listener2);
   target._listeners.splice (listenerIndex, 1);
  //odstrani zaznam posluchace z objektu okna
  delete targetWindow._allListeners[listenerId];
  };
      Core.preventDefault = function(event)
    {
    event.returnValue = false;
    };
    Core.stopPropagation = function(event)
    {
    event.cancelBubble = true;
    };
    Core._findListener = function(target, type, listener)
    {
    //ziska pole ID posluchacu pridanych do target
    var listeners = target._listeners;
    if (!listeners) return -1;
    //ziska odkaz na objekt okna obsahujici target
    var targetDocument = target.document || target;
    var targetWindow = targetDocument.parentWindow;
    //hleda odzadu, aby se urychlilo zpracovani onunload
    //najde posluchace
    for (var i = listeners.length - 1; i >= 0; i--)
    {
      //ziska ID posluchace z target
      var listenerId = listeners[i];
      //ziska zaznam tohoto posluchace z objektu okna
      var listenerRecord = targetWindow._allListeners[listenerId];
      //porovna typ a posluchace se ziskanym zaznamem
      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 (document.all)
  {
    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.start = function(runnable)
{
  Core.addEventListener(window, "load", runnable.init);
};

Core.findScrollTop = function(x)
{
  var prvek = document.getElementById(x);
  if (window.pageYOffset !=null)
  {
    return prvek.pageYOffset;
  }
  if (document.body.scrollWidth != null)
  {
    return prvek.scrollTop;
  }
  return null;
};

Core.findClientWidth = function()
{
  if(null != (document.body.clientWidth))
  {
    return document.body.clientWidth;
  }
  if (null != window.innerWidth)
  {
    return window.innerWidth;
  }
  return null;
};

/*alert();*/