function SpkCalendarBox(title, arrSetting)
{
	this._title = title;
	
	this._controller = new SpkCalendarBoxController();
	this._model = new SpkCalendarBoxModel(this._controller );
	
	this._model.importSettings(arrSetting);
	this._view = new SpkCalendarBoxView(this._model, this._controller);
	this._model.registerView(this._view);
	
	this._controller.setModel(this._model);
	this._controller.setView(this._view);

	this._init();
} // SpkCalendarBox

SpkCalendarBox.prototype.Show = function() {
	this._view.updateView();
}

// FUNCTION INIT
SpkCalendarBox.prototype._init = function() {
	if(!(this._model.getSetting("autoLoad") == false )) {
		this._view.updateView();
	}
}

function SpkCalendarBoxController()
{
	this._model = Object();
	this._view = Object();

} // BoxModel

SpkCalendarBoxController.prototype.setModel = function(objModel) {
	this._model = objModel;
}

SpkCalendarBoxController.prototype.setView = function(objView) {
	this._view = objView;
}

SpkCalendarBoxController.prototype.gotoPrev = function () {
	if(this._controller._view._currentMonth == 0) {
		this._controller._view._currentMonth = 11;
		this._controller._view._currentYear--;
	} else {
		this._controller._view._currentMonth--;
	}
	this._controller._view.updateView();
}

SpkCalendarBoxController.prototype.gotoNext = function () {
	if(this._controller._view._currentMonth == 11) {
		this._controller._view._currentMonth = 0;
		this._controller._view._currentYear++;
	} else {
		this._controller._view._currentMonth++;
	}
	this._controller._view.updateView();
}

SpkCalendarBoxController.prototype.changeDate = function () {
	var splitted = this.value.split("-");
	this._controller._view._currentMonth = parseInt(splitted[0]) -1;
	this._controller._view._currentYear = parseInt(splitted[1]);
	this._controller._view.updateView();
}

SpkCalendarBoxController.prototype.changeCategory = function () {
	this._controller._view._category = this.value;
	this._controller._view.updateView();
}

SpkCalendarBoxController.prototype.changeProgram = function () {
	this._controller._view._program = this.value;
	this._controller._view.updateView();
}

function SpkCalendarBoxModel(objController)
{
	this._controller = objController;
	this._view = Array();
	var localread = "/localreader.aspx?url=";
	this._categoryReader = localread + "http://paspoort.kro.nl/krocommunity/util/list_blogcategorieen.aspx";
	this._programReader = localread + "http://paspoort.kro.nl/krocommunity/util/list_programmas.aspx";
	this._dateReader = localread + "http://paspoort.kro.nl/krocommunity/util/list_blogdate.aspx";
} // BoxModel

SpkCalendarBoxModel.prototype.registerView = function(objView) {
	this._view[this._view.length] = objView;
};
	
SpkCalendarBoxModel.prototype.notifyChanges = function() {
	for(iC=0;iC<this._view.length;iC++)		{
		this._view[iC].updateView();
	}
}; // updateView 

SpkCalendarBoxModel.prototype.importSettings = function(arrSettings) {
	this._settings = arrSettings;
}

SpkCalendarBoxModel.prototype.getSetting = function(name) {
	return(this._settings[name]);
}

SpkCalendarBoxModel.prototype.setSetting = function(name, value) {
	this._settings[name] = value;
}

function SpkCalendarBoxView(objModel, objController)
{
	this._model = objModel;
	this._controller = objController;
	
	if(this._model.getSetting("boxNavCurrentYear")) {
		this._currentYear = this._model.getSetting("boxNavCurrentYear");
	} else {
		this._currentYear = Math.round(new Date().getFullYear());
	}
	if(this._model.getSetting("boxNavCurrentMonth")) {
		this._currentMonth = this._model.getSetting("boxNavCurrentMonth");
	} else {
		this._currentMonth =  Math.round(new Date().getMonth());
	}

	if(this._model.getSetting("catId")) {
		this._category = this._model.getSetting("catId");
	}
	if(this._model.getSetting("programId")) {
		this._program = this._model.getSetting("programId");
	}
	
} // BoxView


//inheritance
//SpkCalendarBoxView.prototype = new SpViewMVC(this._model, this._controller);

SpkCalendarBoxView.prototype.buildFeedUrlCode = function() {
	var retVal = 0;
	if(this._model.getSetting("showCatBox") != false) {	retVal = retVal + 2; }
	if(this._model.getSetting("showDateBox") != false) { retVal = retVal + 8; }
	if(this._model.getSetting("showProgramBox") != false) {	retVal = retVal + 16; }
	if(this._model.getSetting("userId") != undefined) {
		retVal = retVal + 256;
	}

	retVal = -1;
	return(retVal);
}

SpkCalendarBoxView.prototype.buildFeedUrl = function() {
	//var Q = urlToHash(this._model.getSetting("feed"));
	QS = new Hash();
	QS["a"] = "-1";
	if(this._category >= 0) { 
		QS["cid"] = this._category;	
	}

	myDate = new Date();
	myDate.setFullYear(this._currentYear,this._currentMonth+1,1);
	this._currentMonth = parseInt(this._currentMonth);
	if(this._currentMonth >= 0) {
		QS["date"] = "01-"+ (this._currentMonth+1).toPaddedString(2) +"-"+this._currentYear+",01-"+(myDate.getMonth()+1).toPaddedString(2)+"-"+myDate.getFullYear();
	}

	if(this._program >= 0) { 
		QS["pid"] = this._program;	
	}
	
	if(this._model.getSetting("userId") != undefined) {
		QS["uid"] = this._model.getSetting("userId");
	}

	if(this._model.getSetting("feed").indexOf("?") > 0) {
		newFeed = this._model.getSetting("feed").substring(0,this._model.getSetting("feed").indexOf("?"));
	} else {
		newFeed = this._model.getSetting("feed");
	}
	newFeed = newFeed+"?"+Hash.toQueryString(QS);

	this._model.setSetting("feed",newFeed);
}

SpkCalendarBoxView.prototype.buildDefaultFeedUrl = function() {
	//var Q = urlToHash(this._model.getSetting("feed"));
	QS = new Hash();
	QS["a"] = "-1";
	
	if(this._model.getSetting("catId") != undefined) {
		QS["cid"] = this._model.getSetting("catId");
	}	

	//myDate = new Date();
	//myDate.setFullYear(this._currentYear,this._currentMonth+1,1);
	//this._currentMonth = parseInt(this._currentMonth);
	//if(this._currentMonth >= 0) {
	//	QS["date"] = "01-"+ (this._currentMonth+1).toPaddedString(2) +"-"+this._currentYear+",01-"+(myDate.getMonth()+1).toPaddedString(2)+"-"+myDate.getFullYear();
	//}

	if(this._model.getSetting("programId") != undefined) {
		QS["pid"] = this._model.getSetting("programId");
	}	
	
	if(this._model.getSetting("userId") != undefined) {
		QS["uid"] = this._model.getSetting("userId");
	}
	
	return "?" + Hash.toQueryString(QS);
}

SpkCalendarBoxView.prototype.updateView = function() {
	document.getElementById(this._model.getSetting("target")).innerHTML = "";

	this.buildFeedUrl();
	this.buildView();
}

SpkCalendarBoxView.prototype.buildTitle = function() {

	var divTitle = document.createElement("div");
	divTitle.className = "titel";
	var hTitle = document.createElement("h1");
	hTitle.innerHTML = this._model.getSetting("title");
	divTitle.appendChild(hTitle);	
	return(divTitle);
}

SpkCalendarBoxView.prototype.buildNavTitle = function()
{
	var el = document.createElement("span");
	el.className = "navTitle";
	el.innerHTML = nlMonth(this._currentMonth) + " " +  this._currentYear;
	return(el);
}

SpkCalendarBoxView.prototype.buildNav = function(classPostfix) {

	var Container = document.createElement("div");
	Container.className = "selectieNavigatie" + classPostfix;

	var extraContainer = document.createElement("div");

	if(this._model.getSetting("showDateBox") != false) {
		var dlDate = new DropList("dateNav",this._controller.changeDate, this._controller);
		dlDate.loadFromXml(this._model._dateReader + encodeURIComponent(this.buildDefaultFeedUrl()));
		var selectDate =  (this._currentMonth+1).toPaddedString(2) +"-"+ this._currentYear;
		extraContainer.appendChild(dlDate.paint(selectDate, " - - alle maanden - - "));		
	}
	if(this._model.getSetting("showProgramBox") != false) {
		var dlCat = new DropList("progNav",this._controller.changeProgram, this._controller);
		dlCat.loadFromXml(this._model._programReader + encodeURIComponent(this.buildDefaultFeedUrl()));
		extraContainer.appendChild(dlCat.paint(this._program, " - - alle programma's - - "));		
	}
	if(this._model.getSetting("showCategoryBox") != false) {
		var dlCat = new DropList("catNav",this._controller.changeCategory, this._controller);
		dlCat.loadFromXml(this._model._categoryReader + encodeURIComponent(this.buildDefaultFeedUrl()));
		extraContainer.appendChild(dlCat.paint(this._category, " - - alle categorieen - - "));
	}

	Container.appendChild(extraContainer);

	return(Container);
}

SpkCalendarBoxView.prototype.buildBodyHeader = function() {
	if(this._model.getSetting("bodyHeader")) {
			var divC = document.createElement("div");
			var cssHeader = "bovenContainer";
			if(this._model.getSetting("cssHeader")) {
				cssHeader = this._model.getSetting("cssHeader");
			}
			divC.className = cssHeader;
			divC.innerHTML = this._model.getSetting("bodyHeader");
			return(divC);
	} else {
			return document.createTextNode("");
	}
} 

SpkCalendarBoxView.prototype.buildBodyFooter = function() {
	if(this._model.getSetting("bodyFooter")) {
			var divC = document.createElement("div");
			var cssFooter = "onderContainer";
			if(this._model.getSetting("cssFooter")) {
				cssFooter = this._model.getSetting("cssFooter");
			}
			divC.className = cssFooter;
			divC.innerHTML = this._model.getSetting("bodyFooter");
			return(divC);
	} else {
			return document.createTextNode("");
	}
} 

SpkCalendarBoxView.prototype.buildContent = function()
{
	var rssList = new SpkRssList(this._model._settings);
	return rssList.build();
} // 

SpkCalendarBoxView.prototype.buildView = function() {
	var target = document.getElementById(this._model.getSetting("target"));
	
	if(this._model.getSetting("showBoxTitle")) {
		target.appendChild(this.buildTitle());
	}
	target.appendChild(this.buildBodyHeader());
	
	target.appendChild(this.buildNav("Boven"));
		
	target.appendChild(this.buildContent());
	target.appendChild(this.buildNav("Onder"));	
	target.appendChild(this.buildBodyFooter());
}
