function toggleCalendar(objname){
	var DivDisplay = document.getElementById(objname).style;
	if (DivDisplay.display  == 'none') {
	  DivDisplay.display = 'block';
	}else{
	  DivDisplay.display = 'none';
	}
}

function changeMonth(year, month){
	//events = events || 1;	
	var xhConn = new XHConn();
	var cal_form = document.getElementById('cal_form');
	var vars='year='+year+'&month='+month;
	for(i=0;i<cal_form.length;i++){
		vars=vars+'&'+cal_form[i].name+'='+cal_form[i].value;
	}
	document.getElementById('wp-calendar').firstChild.innerHTML = 'türelem...';
	xhConn.connect('/connect.Calendar.php', 'GET', vars, function(xh){
	document.getElementById('wp-calendar').parentNode.innerHTML = xh.responseText;
	})
}

function showPicker(objname,datefield_id){//todo nyerjük ki a dátumot a fieldből
	var datefield_id = datefield_id || 'date';
	var date = document.getElementById(datefield_id).value.split("-",2);
	var year = date[0];
	var month = date[1];
	var DivDisplay = document.getElementById(objname);
	//DivDisplay.style.position = 'absolute';	
	if (DivDisplay.style.display == 'none') {
		var vars='year='+year+'&month='+month+'&show_events=0&datefield_id='+datefield_id;
		var xhConn = new XHConn();
		document.getElementById('wp-calendar').firstChild.innerHTML = 'türelem...';
		xhConn.connect('/connect.Calendar.php', 'GET', vars, function(xh){
		document.getElementById('wp-calendar').parentNode.innerHTML = xh.responseText;

		DivDisplay.style.display = 'block';
		document.getElementById('bg').style.display = 'block';
		var dateField = findPos(document.getElementById(datefield_id));
		var x = dateField[0];
		var y = dateField[1]-DivDisplay.offsetHeight-10;
		if (y < 0) y = dateField[1]+dateField.offsetHeight+10;
		DivDisplay.style.left = x+'px';
		DivDisplay.style.top = y+'px';
		})
	}
	else {
		DivDisplay.style.display = 'none';
		document.getElementById('bg').style.display = 'none';
	}
}

function selectDate(date,datefield_id) {
	datefield_id = datefield_id || 'date';
	document.getElementById(datefield_id).value=date;
	showPicker('datepicker_wrap');
}

function findPos(obj) {
	var curleft = curtop = 0;
	if (obj.offsetParent) {
	do {
		curleft += obj.offsetLeft;
		curtop += obj.offsetTop;
	} while (obj = obj.offsetParent);
	return [curleft,curtop];
}
}




function XHConn()
{
  var xmlhttp, bComplete = false;
  xmlhttp = XHRFactory.getInstance();
  if (!xmlhttp) return null;
  this.connect = function(sURL, sMethod, sVars, fnDone)
  {
    if (!xmlhttp) return false;
    bComplete = false;
    sMethod = sMethod.toUpperCase();

    try {
      if (sMethod == "GET")
      {
        xmlhttp.open(sMethod, sURL+"?"+sVars, true);
        sVars = "";
      }
      else
      {
        xmlhttp.open(sMethod, sURL, true);
        xmlhttp.setRequestHeader("Method", "POST "+sURL+" HTTP/1.1");
        xmlhttp.setRequestHeader("Content-Type", "application/x-www-form-urlencoded");
      }
      xmlhttp.onreadystatechange = function(){
        if (xmlhttp.readyState == 4 && !bComplete)
        {
          bComplete = true;
          if(fnDone != null) fnDone(xmlhttp);
          XHRFactory.release(xmlhttp);
        }};
      xmlhttp.send(sVars);
    }
    catch(z) { return false; }
    return true;
  };
  return this;
}


/** XHRFactory                                                                      **
 ** This class from: http://blogs.pathf.com/agileajax/2006/08/object_pooling_.html  **/
var XHRFactory = (function(){
 // static private member
 var stack = new Array();
 var poolSize = 10;
 
 var nullFunction = function() {}; // for nuking the onreadystatechange
 
 // private static methods
 
 function createXHR() {
  if (window.XMLHttpRequest) {
       return new XMLHttpRequest();
     } else if (window.ActiveXObject) {
       return new ActiveXObject('Microsoft.XMLHTTP')
     }
    }

 // cache a few for use
 for (var i = 0; i < poolSize; i++) {
  stack.push(createXHR());
 }
 
 // shared instance methods
 return ({
  release:function(xhr){
   xhr.onreadystatechange = nullFunction;
   stack.push(xhr);
  },
  getInstance:function(){
   if (stack.length < 1) {
    return createXHR();
   } else {
    return stack.pop();
   }
  },
  toString:function(){
   return "stack size = " + stack.length;
  }
 });
})();


