/*
* @project Linker 0.0.1a
* @autor Vojtech Kopal
*/
var selected_day = 1;
var selected_month = 1;
var selected_year = 1900;

var JS;

// Vytvoření objektu Phieyes
if (!JS) {
	JS = {};
}

// Vytvoření objektu Phieyes.AJAX
if (!JS.AJAX) {
	JS.AJAX = {};
}

// Vytvoření objektu Phieyes.AJAX
if (!JS.CacheFront) {
	JS.CacheFront = {};
}

// Vytvoření objektu Phieyes.Response
if (!JS.Responses) {
	JS.Responses = {};
}

if (!JS.Action) {
	JS.Action = {};
}

if (!JS.CommonFunction) {
	JS.CommonFunction = {};
}

if (!JS.Cookie) {
	JS.Cookie = {};
}

if (!JS.Functions) {
	JS.Functions ={};
}

if (!JS.DOM) {
	JS.DOM ={};
}

if (!JS.Preloading) {
	JS.Preloading ={};
}

/*
 * AJAX engine
 */
JS.AJAX.openRequest = function () {
	var request = false;

	// Detekce moderních prohlížečů jako Firefox, Opera, Konqueror
	try {
    	request = new XMLHttpRequest();
    	
    	JS.AJAX.openRequest = function () { return new XMLHttpRequest(); }
	}
    catch (e) {
		// Detekce Internet Exploreru a jeho verzí, které podporují XMLHttpRequest
		var i;
	
		// Pole ID ActiveX objektů
    	var activeXID = ["MSXML2.XMLHTTP.6.0",
        	             "MSXML2.XMLHTTP.5.0",
            	         "MSXML2.XMLHTTP.4.0",
                	     "MSXML2.XMLHTTP.3.0",
                    	 "MSXML2.XMLHTTP",
	                     "Microsoft.XMLHTTP"];
				
		// Nalezeni správného ActiveX objektu pro vytvoření instance
		for (i = 0; i < activeXID.length; i++) {
			try {
				request = new ActiveXObject(activeXID[i]);
				
				JS.AJAX.openRequest = function () { return new ActiveXObject(activeXID[i]); }
				break;
			} catch (e) {
				request = false;
			}
		}
	}
	return request;
};

/**
 * Parametry pro zadost
 */
JS.AJAX.propertiesRequestList = ["method",
									  "url",
									  "async",
									  "postData",
									  "callback",
									  "headers",
									  "status"];

JS.AJAX.propertiesRequest = function () {
	var	properties = JS.AJAX.propertiesRequestList;

	for (var i = 0; i < properties.length; i++) {
		this[properties[i]] = null;
	}

	this.method = "POST";
	this.async = true;
	this.headers = {}
	this.postData = null;
};

/**
 * Vytvoření požadavku
 * @param {Object} method
 * @param {Object} url
 * @param {Object} async
 * @param {Object} callback
 * @param {Object} options
 */
JS.AJAX.createRequest = function (method, url, async, callback, postData) {

    // Předá vlastnosti žádosti
	var request = new JS.AJAX.propertiesRequest ();
	
	request.method = method;
	request.url = url;
	request.async = async;
	request.callback = callback;
	request.postData = postData;

	try {
		// Vytvoří session pro XMLHTTPRequest
		request.connection = JS.AJAX.openRequest ();
		
		if (!request.connection) {
			return null;
		}

		request.connection.open (request.method, request.url, request.async);
		
		// Pokud je zvolen aktivovan asynchronni prenost
		if (request.async) {
			
			request.connection.onreadystatechange = function () {
				//alert ("async");
				JS.AJAX.handlerServerResponse (request.connection, request.callback);	
			};
		}
		
		if (request.method == 'POST') {
			request.connection.setRequestHeader ("Content-type", "application/x-www-form-urlencoded");
		}
		//alert (request.connection);
		request.connection.send (request.postData);
		
	} catch (e) {
		alert ('Nepodařilo se vytvořit XMLHTTPRequest instanci');
	}

	return request;
};

JS.AJAX.handlerServerResponse = function (request ,callback) {
	//alert ('Phieyes.Responses.'+ callback +'(request)');
	eval ('JS.Responses.'+ callback +'(request)');
};

JS.CommonFunction.encode = function (uri) {
  if (encodeURIComponent) {
    return encodeURIComponent (uri);
  }

  if (escape) {
    return escape (uri);
  }
  
  return uri;
};

JS.Action.getLinks = function (month, year) {
  	
	var data = 'month=' + month +'&year=' + year;
	
	JS.AJAX.openRequest ();
	JS.AJAX.createRequest ('POST', 'scripts/calendar.xml.php', true, 'viewItems', data);

};

function twodig (str) {
    str = str + "";
    if (str.length < 2)
       return "0" + str;
    else 
       return str;
}

function FillCalendar(month, year) {
  JS.Action.getLinks(month, year);
}

function FillCalendarCore(month, year, days) {
    if (month == 0) { month = 12; year--; } else
      if (month == 13) { month = 1; year++; }
  
    var i = 1;
    var j = 1;
    var a;
    for (i = 1; i <= 6; i++) 
      for (j = 1; j <= 7; j++) {

            a = document.getElementById("a" + i + j);	            
			a.innerHTML = "";
      }
    
    j = 1;
    datum = new Date(); // aktuální čas
    datum.setFullYear(year);
    datum.setMonth(month - 1);
    datum.setDate(1);
    datum.setHours(6);
    var d;
    while (datum.getMonth() + 1 == month) {
      if (datum.getDay() == 0)  
		a = document.getElementById("a" + (j++) + "7");
	  else
	    a = document.getElementById("a" + j + datum.getDay());
	    
	  if ((selected_year == year) && (selected_month == month) && (selected_day == datum.getDate()))
		a.className = 'datum'; else a.className = '';
	    
	  if (days[datum.getDate()]) 
		a.innerHTML = "<a href=\"?page=/archiv-aktualit/" + year + "-" + twodig(month) + "-" + twodig(datum.getDate()) +"\">" + datum.getDate() + "</a>";
	  else
	    a.innerHTML = datum.getDate() +'';
	   
      datum.setTime(datum.getTime() + 24*60*60*1000 );      
    }    
	
	var mesic = new Array("Leden","Únor", "Březen", "Duben", "Květen", "Červen", "Červenec", "Srpen", "Září", "Říjen", "Listopad", "Prosinec");
	
	a = document.getElementById("cal_caption");
	a.innerHTML = mesic[month - 1] + " " + year;
	
	a = document.getElementById("aPrevMonth");
	a.href = "javascript: FillCalendar(" + (month -1) + "," + year + ")";
	a = document.getElementById("aNextMonth");
	a.href = "javascript: FillCalendar(" + (month +1) + "," + year + ")";	
}

JS.Responses.viewItems = function (response) {

	if (response.readyState == 4 || response.readyState == 0) {
	
		if (response.status == 200) {	
			try {

					var items = response.responseXML.documentElement;
					var month = items.getElementsByTagName('Month').item(0).getAttribute('value')*1;
					var year = items.getElementsByTagName('Year').item(0).getAttribute('value')*1;
					
					var nodes = items.getElementsByTagName('Days').item(0).getElementsByTagName('Item');
					var days = new Array ();
					
					for (var i = 1; i <= 31; i++)
					{
					  days[i] = false; 
					}
					
					for (var i = 0; i < nodes.length; i++)
					{			
						days[nodes[i].getAttribute('date')*1] = true;
					}
												
					FillCalendarCore(month, year, days);
					
			} catch (e) {
					alert ('Error ' + e.message);
			}
		}
	}

}

