var Engine = {
	
	eventList : {}, 

	addEvents : function(id, events)
	{
		
		if (typeof id !== 'object')
		{
			var ele = $(id); 
		}
		else if (typeof id === 'object' && id.length != 0) // padots array
		{	
			for(var i=0, j=id.length; i<j; i++)
			{
				var ele = $(id[i]);
				
				for(var e_id in events)
				{
					//var event = events[e_id]; 
					//ele[e_id] = event('asd');
				}
		
			}
		}

	},

	loadEvent : function(func) { 
	var oldonload = window.onload; 
	 if (typeof window.onload != 'function') { 
	   window.onload = func; 
	  } else { 
	   window.onload = function() { 
	    oldonload(); 
	    func(); 
	    } 
	 } 
	}, 

	addEvent : function(evnt, elem, func) {
    if (elem.addEventListener)  // W3C DOM
        elem.addEventListener(evnt, func, false);
    else if (elem.attachEvent) { // IE DOM
         var r = elem.attachEvent('on'+evnt, func);
	return r;
    }
}

},

Interface = {
	
	obj : null,

	fadeOut : function(ele, speed, callback)
	{
		if (typeof ele != 'object') {
			ele = $(ele);
		}
		
		if (!ele)
			return; 

		this.changeInfo.action = 'fadeOut';

		if (!ele.style.opacity) // fall backs, ja nav opacity
		{
			ele.style.opacity = '1.0';
			ele.style.filter = 'alpha(opacity = 100)'; 
		}

		if (ele.style.opacity >= '0.1')
		{
			var new_opac = ele.style.opacity - speed;
			ele.style.opacity = new_opac; 
			ele.style.filter = "alpha(opacity=" + (new_opac * 100) + ")";

			this.changeInfo.timer = setTimeout(function(){Interface.fadeOut(ele,speed,callback);},80);  
		}
		else 
		{
			this.changeInfo.action = null;
			ele.style.display = 'none';
			if (callback)
			{
				callback();
			}
			
		}
	},

	fadeIn :  function(ele, speed, callback)
	{
	
		if (typeof ele != 'object') {
			ele = $(ele);
		}
		
		if (!ele)
			return; 

		this.changeInfo.action = 'fadeIn';
		
		if(!ele.style.display || ele.style.display == 'none')
		{
			ele.style.display = 'block';
		}
		
		// xbrowser opacity fallbacki
		if (!ele.style.opacity) 
		{
			ele.style.opacity = '0.0'; 
			ele.style.filter = 'alpha(opacity = 0)'; 
		}

		if (ele.style.opacity <= '0.9')
		{			
			var new_opac = ele.style.opacity * 1 + speed * 1;
			ele.style.opacity = new_opac; 
			ele.style.filter = "alpha(opacity=" + (new_opac * 100) + ")";
			
			this.changeInfo.timer = setTimeout(function(){Interface.fadeIn(ele,speed,callback);},80);  
		}
		else 
		{	
			this.changeInfo.action = null;
			if (callback) 
			{
				callback();
			}
		}

	},

	changeInfo : function(ele)
	{
		
		if (typeof active != 'object')
		{
			active = $(active);
		}

		// If same element return
		if (Interface.changeInfo.active == ele)
		{
			return; 
		}

		var active = this.changeInfo.active; 
		var action = this.changeInfo.action; 
		
		if (!action)
		{
			this.changeInfo.timer = this.fadeOut(active, '0.1',
				function()
				{
					Interface.changeInfo.active = ele; 
					Interface.fadeIn(ele, '0.1');
				}
			);	

		}
		
		if (action == 'fadeIn' || action == 'Fadeout')
		{
			clearTimeout(this.changeInfo.timer);
			this.changeInfo.timer = this.fadeOut(active, '0.1',
				function()
				{
					Interface.changeInfo.active = ele; 
					Interface.fadeIn(ele, '0.1');
				}
			);	
		}
		
	}, 
	
	getCords : function(e)
	{


	}, 

	serviceScheme : function(e)
	{
		if (!e) var e = window.event;
		
		if (! Interface.obj)
		{
			var obj;
			if (e.target) obj = e.target;
			else if (e.srcElement) obj = e.srcElement;
			
			if(!obj) 
				return false;
			var pos = {x: obj.offsetLeft||0, y: obj.offsetTop||0};
			while(obj = obj.offsetParent)
			{
				pos.x += obj.offsetLeft||0;
				pos.y += obj.offsetTop||0;
			}
			Interface.obj = {x: pos.x, y: pos.y };
		}	
		var obj = Interface.obj; 
		
		var mousex, mousey;
		
		// xbrowser 
		if(e.pageX || e.pageY)
		{
			mousex = e.pageX;
			mousey = e.pageY;
		}
		else if (e.clientX || e.clientY)
		{
			mousex = e.clientX + document.body.scrollLeft + document.documentElement.scrollLeft;
			mousey = e.clientY + document.body.scrollTop + document.documentElement.scrollTop;
		}

		var x = mousex - obj.x;
		var y = mousey - obj.y;
		
		//test 
		var data = { 
			intro : { top_x : 240, top_y: 5, down_x : 420, down_y : 110 },
			cleaning : { top_x : 480, top_y: 65, down_x : 600, down_y : 180 },
			virus_scan : { top_x : 495, top_y: 250, down_x : 630, down_y : 350 },
			processes : { top_x : 370, top_y: 400, down_x : 500, down_y : 495 },
			defragmentation : { top_x : 160, top_y: 390, down_x : 270, down_y : 500 },
			registry : { top_x : 20, top_y: 250, down_x : 160, down_y : 350 },
			security : { top_x : 60, top_y: 65, down_x : 180, down_y : 180 }
		} 
		
		//var segment; 
		for (var key in data)
		{
			
			if(data[key].top_x < x && x < data[key].down_x && data[key].top_y < y && y < data[key].down_y)
			{	
				Interface.changeInfo('scheme_' + key); 
			//	segment = key;
				break;
			}

			//segment = null; 
		}

		//$('apkopju_shema').innerHTML = 'x: ' + x + ' y: ' + y + ' ' + segment; 

		document.onmousemove = Interface.serviceScheme;
		document.onmouseout = function(){ document.onmousemove = null; Interface.obj = null; }; 
	}
	
};


var Ajax = { 

id : 1, 
request : { }, 	

createRequest : function() { 

var request = false;
var id = this.id++;	

   try { request = new XMLHttpRequest(); } 
   catch (trymicrosoft) { try { request = new ActiveXObject("Msxml2.XMLHTTP"); } 
   catch (othermicrosoft) { try { request = new ActiveXObject("Microsoft.XMLHTTP"); } 
   catch (failed)  { request = false; } } }

request.id = id; 
return this.request[id] = request; 

}, 

get : function(page, target, callback) { 

var request = this.createRequest();	  
var self = this; 

request.onreadystatechange = function() { 
	
	if(request.readyState == 4 && request.status == 200) 
	 { 
		if(request.getResponseHeader('X-callback') == 1) {
			request.failed = 1; 
		}

		if(callback) { callback(request); }
		else { self.update(request, target); }
	
		//if(self.request[request.id].failed != 1) { // darbojas pilnveidot logiku
		delete self.request[request.id]; 
		//}
	 }
}

request.open("GET", page, true);
request.setRequestHeader('X-Requested-With', 'ajax');
request.send(null);

},

update : function(request, target) {

	target = document.getElementById(target);
	if(target)
		{
		target.innerHTML = request.responseText;
		}	
}

}; 

function $(id) 
{ 
	if ($.elements[id]) 
	{
		return $.elements[id]; 
	}
	else 
	{ 
		return $.elements[id] = document.getElementById(id);
	}
}
$.elements = {};


function print_r(arr,level) {
var dumped_text = "";
if(!level) level = 0;

//The padding given at the beginning of the line.
var level_padding = "";
for(var j=0;j<level+1;j++) level_padding += "    ";

if(typeof(arr) == 'object') { //Array/Hashes/Objects
 for(var item in arr) {
  var value = arr[item];
 
  if(typeof(value) == 'object') { //If it is an array,
   dumped_text += level_padding + "'" + item + "' ...\n";
   dumped_text += dump(value,level+1);
  } else {
   dumped_text += level_padding + "'" + item + "' => \"" + value + "\"\n";
  }
 }
} else { //Stings/Chars/Numbers etc.
 dumped_text = "===>"+arr+"<===("+typeof(arr)+")";
}

//$('content_main').innerHTML = dumped_text;
return dumped_text;
} 