
/* This Script is GPL. It has been distributed to you by iSource, 
 * this version contains some client specific modifications, you better get the original script
 * if you want to use it yourself, but because of GPL you may use this one as well of course.
 * original: http://dynarch.com/mishoo/calendar.epl
 * modified for iSource by Gabor de Mooij (c) 2007
 */


/*  Copyright Mihai Bazon, 2002, 2003  |  http://dynarch.com/mishoo/
 * ---------------------------------------------------------------------------
 *
 * The DHTML Calendar
 *
 * Details and latest version at:
 * http://dynarch.com/mishoo/calendar.epl
 *
 * This script is distributed under the GNU Lesser General Public License.
 * Read the entire license text here: http://www.gnu.org/licenses/lgpl.html
 *
 * This file defines helper functions for setting up the calendar.  They are
 * intended to help non-programmers get a working calendar on their site
 * quickly.  This script should not be seen as part of the calendar.  It just
 * shows you what one can do with the calendar, while in the same time
 * providing a quick and simple method for setting it up.  If you need
 * exhaustive customization of the calendar creation process feel free to
 * modify this code to suit your needs (this is recommended and much better
 * than modifying calendar.js itself).
 */

// $Id: calendar-setup.js,v 1.25 2005/03/07 09:51:33 mishoo Exp $

/**
 *  This function "patches" an input field (or other element) to use a calendar
 *  widget for date selection.
 *
 *  The "params" is a single object that can have the following properties:
 *
 *    prop. name   | description
 *  -------------------------------------------------------------------------------------------------
 *   inputField    | the ID of an input field to store the date
 *   displayArea   | the ID of a DIV or other element to show the date
 *   button        | ID of a button or other element that will trigger the calendar
 *   eventName     | event that will trigger the calendar, without the "on" prefix (default: "click")
 *   ifFormat      | date format that will be stored in the input field
 *   daFormat      | the date format that will be used to display the date in displayArea
 *   singleClick   | (true/false) wether the calendar is in single click mode or not (default: true)
 *   firstDay      | numeric: 0 to 6.  "0" means display Sunday first, "1" means display Monday first, etc.
 *   align         | alignment (default: "Br"); if you don't know what's this see the calendar documentation
 *   range         | array with 2 elements.  Default: [1900, 2999] -- the range of years available
 *   weekNumbers   | (true/false) if it's true (default) the calendar will display week numbers
 *   flat          | null or element ID; if not null the calendar will be a flat calendar having the parent with the given ID
 *   flatCallback  | function that receives a JS Date object and returns an URL to point the browser to (for flat calendar)
 *   disableFunc   | function that receives a JS Date object and should return true if that date has to be disabled in the calendar
 *   onSelect      | function that gets called when a date is selected.  You don't _have_ to supply this (the default is generally okay)
 *   onClose       | function that gets called when the calendar is closed.  [default]
 *   onUpdate      | function that gets called after the date is updated in the input field.  Receives a reference to the calendar.
 *   date          | the date that the calendar will be initially displayed to
 *   showsTime     | default: false; if true the calendar will include a time selector
 *   timeFormat    | the time format; can be "12" or "24", default is "12"
 *   electric      | if true (default) then given fields/date areas are updated for each move; otherwise they're updated only on close
 *   step          | configures the step of the years in drop-down boxes; default: 2
 *   position      | configures the calendar absolute position; default: null
 *   cache         | if "true" (but default: "false") it will reuse the same calendar object, where possible
 *   showOthers    | if "true" (but default: "false") it will show days from other months too
 *
 *  None of them is required, they all have default values.  However, if you
 *  pass none of "inputField", "displayArea" or "button" you'll get a warning
 *  saying "nothing to setup".
 */
//store state of agenda -Gabor de Mooij
  function gotoURL(url)
  {
     /*if (typeof(m)!='undefined'){
         m=m.toString().split('-');
         var n = new Date();
         n.setFullYear(m[0]);
         n.setMonth(m[1]-1);
         n.setDate(m[2]);
         bdate = n.getTime();
         
         document.location.href=url+"&updatebig&bdat="+bdate; 
         return;
     }    */

//     Turned off becouse the calender was overwriting the news items
//     if (memdate)  {
//
//       document.location.href=url+"&updatecal&kaldat="+memdate+"&from="+memfrom; //+"&updatebig&bdat="+memdate;
//   } else {
        document.location.href=url;
   //  }
  } 
  
function __f(d)
{
    if (d.toString().length==1) return '0'+d; else return d;
}

Calendar.setup = function (params) {
	function param_default(pname, def) { if (typeof params[pname] == "undefined") { params[pname] = def; } };

	param_default("inputField",     null);
	param_default("displayArea",    null);
	param_default("button",         null);
	param_default("eventName",      "click");
	param_default("ifFormat",       "%Y/%m/%d");
	param_default("daFormat",       "%Y/%m/%d");
	param_default("singleClick",    true);
	param_default("disableFunc",    null);
	param_default("dateStatusFunc", params["disableFunc"]);	// takes precedence if both are defined
	param_default("dateText",       null);
	param_default("firstDay",       null);
	param_default("align",          "Br");
	param_default("range",          [1900, 2999]);
	param_default("weekNumbers",    true);
	param_default("flat",           null);
	param_default("flatCallback",   null);
	param_default("onSelect",       null);
	param_default("onClose",        null);
	param_default("onUpdate",       null);
	param_default("date",           null);
	param_default("showsTime",      false);
	param_default("timeFormat",     "24");
	param_default("electric",       true);
	param_default("step",           2);
	param_default("position",       null);
	param_default("cache",          false);
	param_default("showOthers",     false);
	param_default("multiple",       null);

	var tmp = ["inputField", "displayArea", "button"];
	for (var i in tmp) {
		if (typeof params[tmp[i]] == "string") {
			params[tmp[i]] = document.getElementById(params[tmp[i]]);
		}
	}
	if (!(params.flat || params.multiple || params.inputField || params.displayArea || params.button)) {
		alert("Calendar.setup:\n  Nothing to setup (no fields found).  Please check your code");
		return false;
	}

	function onSelect(cal) {
		var p = cal.params;
		var update = (cal.dateClicked || p.electric);
		if (update && p.inputField) {
			p.inputField.value = cal.date.print(p.ifFormat);
			if (typeof p.inputField.onchange == "function")
				p.inputField.onchange();
		}
		if (update && p.displayArea)
			p.displayArea.innerHTML = cal.date.print(p.daFormat);
		if (update && typeof p.onUpdate == "function")
			p.onUpdate(cal);
		if (update && p.flat) {
			if (typeof p.flatCallback == "function")
				p.flatCallback(cal);
		}
		if (update && p.singleClick && cal.dateClicked)
			cal.callCloseHandler();
	};

	if (params.flat != null) {
		if (typeof params.flat == "string")
			params.flat = document.getElementById(params.flat);
		if (!params.flat) {
			alert("Calendar.setup:\n  Flat specified but can't find parent.");
			return false;
		}
		var cal = new Calendar(params.firstDay, params.date, params.onSelect || onSelect);
		cal.showsOtherMonths = params.showOthers;
		cal.showsTime = params.showsTime;
		cal.time24 = (params.timeFormat == "24");
		cal.params = params;
		cal.weekNumbers = params.weekNumbers;
		cal.setRange(params.range[0], params.range[1]);
		cal.setDateStatusHandler(params.dateStatusFunc);
		cal.getDateText = params.dateText;
		if (params.ifFormat) {
			cal.setDateFormat(params.ifFormat);
		}
		if (params.inputField && typeof params.inputField.value == "string") {
			cal.parseDate(params.inputField.value);
		}
		cal.create(params.flat);
		cal.show();
		return false;
	}

	var triggerEl = params.button || params.displayArea || params.inputField;
	triggerEl["on" + params.eventName] = function() {
		var dateEl = params.inputField || params.displayArea;
		var dateFmt = params.inputField ? params.ifFormat : params.daFormat;
		var mustCreate = false;
		var cal = window.calendar;
		if (dateEl)
			params.date = Date.parseDate(dateEl.value || dateEl.innerHTML, dateFmt);
		if (!(cal && params.cache)) {
			window.calendar = cal = new Calendar(params.firstDay,
							     params.date,
							     params.onSelect || onSelect,
							     params.onClose || function(cal) { cal.hide(); });
			cal.showsTime = params.showsTime;
			cal.time24 = (params.timeFormat == "24");
			cal.weekNumbers = params.weekNumbers;
			mustCreate = true;
		} else {
			if (params.date)
				cal.setDate(params.date);
			cal.hide();
		}
		if (params.multiple) {
			cal.multiple = {};
			for (var i = params.multiple.length; --i >= 0;) {
				var d = params.multiple[i];
				var ds = d.print("%Y%m%d");
				cal.multiple[ds] = d;
			}
		}
		cal.showsOtherMonths = params.showOthers;
		cal.yearStep = params.step;
		cal.setRange(params.range[0], params.range[1]);
		cal.params = params;
		cal.setDateStatusHandler(params.dateStatusFunc);
		cal.getDateText = params.dateText;
		cal.setDateFormat(dateFmt);
		if (mustCreate)
			cal.create();
		cal.refresh();
		if (!params.position)
			cal.showAtElement(params.button || params.displayArea || params.inputField, params.align);
		else
			cal.showAt(params.position[0], params.position[1]);
		return false;
	};

	return cal;
};

 //Adapted Special Days code to work with years as well -Gabor de Mooij
 if (document.getElementById('specials')){
 var SPECIAL_DAYS = {};
 var specialdays = document.getElementById('specials').innerHTML;
 specialdays = specialdays.split('|');
 for(var j in specialdays)
 {
     var d = specialdays[j].toString().split('-');
     if (d.length>1){
         var yr = d[0];
         if (typeof(SPECIAL_DAYS[yr])=='undefined') SPECIAL_DAYS[yr]={};
         var dt = parseInt(d[1],10)-1;
         if (typeof(SPECIAL_DAYS[yr][dt])=='undefined') SPECIAL_DAYS[yr][dt]=[];
         SPECIAL_DAYS[yr][dt].push(d[2]);
     }     
 }    
}

  function dateIsSpecial(year, month, day) {
    //if (day==25) debugger;
    var m=false;
    if (typeof(SPECIAL_DAYS[year])!='undefined' && typeof(SPECIAL_DAYS[year][month])) m = SPECIAL_DAYS[year][month];
    if (!m) return false;
    for (var i in m) if (m[i] == day) return true;
    return false;
  };


  //Adapted for web/2 communication by Gabor de Mooij
  function dateChanged(calendar,dontadjustnews) {
    if (calendar.dateClicked) onlyMonth=false; else onlyMonth=true;
	// Beware that this function is called even if the end-user only
    // changed the month/year.  In order to determine if a date was
    // clicked you can use the dateClicked property of the calendar:
    //if (calendar.dateClicked) {
      // OK, a date was clicked, redirect to /yyyy/mm/dd/index.php
      memdate = calendar.date.getTime();
      memfrom = onlyMonth ? 'true' : 'false';
      
      var y = calendar.date.getFullYear();
      var m = calendar.date.getMonth();     // integer, 0..11
      
	  var d = 1;
	  if (!onlyMonth) var d = calendar.date.getDate();      // integer, 1..31
      // redirect...
      
     m2 = m+1;
     d2 = d;
	 if (m2<10) m2 = "0"+m2;
	 if (d2<10) d2 = "0"+d2;
	// alert(y + "-" + m2 + "-" + d2);
	 dateString = y + "-" + m2 + "-" + d2;
	 var dateString2 = y + "-" + m2 + "-" + '01';
	 

	 
     if (__busy) return false;
     __busy=true;
     if (dontadjustnews){
             SERVER.php("$news->getEvents()",{date:dateString2,from:true,specificdate:dateString,catName:'agendacategorie'},updateListSimple);
     } else {
             SERVER.php("$news->getEvents()",{date:dateString2,from:true,specificdate:dateString,catName:'agendacategorie'},updateList);
     }
    //}
  };

   __busy=false;
  function ourDateStatusFunc(date, y, m, d) {
    if (dateIsSpecial(y, m, d))
      return "special";
    else
      return false; // other dates are enabled
      // return true if you want to disable other dates
  };

  Calendar.setup(
    {
      flat         		: "agendacalendar", // ID of the parent element
      flatCallback 		: dateChanged,          // our callback function
      dateStatusFunc 	: ourDateStatusFunc,
	  onUpdate 			: dateChanged,
      weekNumbers 		: false,
      firstDay			: 1,
      showOthers		: true
    }
  );
  
  
  
  function __cleanUpSummary(s)
  {    
      
        if (s.replace("<p>&nbsp;</p>","").replace("&nbsp;").replace("<p>").replace("<p\>").replace("/\s/g","")=="")
        {
            return "";
        } else {
            return s+"<br>";
        
        } 
        
  }
  
  function __checkimage()
  {
    
    try{
        var im = document.getElementById('newsimage');
        im.style.display="block";
        if (im.height > 195) im.height=195;
        if (im.width > 274) im.height=274;
        
    }
    catch(e){
        try{
            im.style.display="none";
       }catch(e){ ; }
    }
    
  }
  
  //custom update command - Gabor de Mooij
  function updateList(res,xxx,dontadjust)
  {

    __busy=false;
    if (typeof(dontadjust)=='undefined') dontadjust=false;
    newsItems = res.data.newsItems;
  	__n = newsItems;
  	 var el = document.getElementById("agendacontentlist");
	 var html = "";
	


	news = new Array();
	news[0] = new Array();
	news[1] = new Array();
	
	var firstElement = true;
	
	for(var i in newsItems){
		if (typeof(newsItems[i]['datum'])!='undefined' && typeof(newsItems[i]['titel'])!='undefined' &&	typeof(newsItems[i]['samenvatting'])!='undefined'){
			

			if (newsItems[i]['datum'] == dateString)
			{
				news[0].push(newsItems[i]);
				if (firstElement === true){
					firstElement = newsItems[i];
				}
			}
			else 
			{
				news[1].push(newsItems[i]);
			}
		}
	}
	newsItems = news.concat(news[0] , news[1]);
	 for(var i in newsItems){
	 	
		if (typeof(newsItems[i]['datum'])!='undefined' && typeof(newsItems[i]['titel'])!='undefined' &&	typeof(newsItems[i]['samenvatting'])!='undefined'){
		  	
		  	var template = "<div class='agendaitem'><div class='agendaitemdate'>###1</div><div class='agendaitemtitle'><h4>###sub</h4><h3>###2</h3></div><div class='agendaitemsummary'>###3</div></div>";
        	dateparts = newsItems[i]['datum'].toString().split("-");
            d = dateparts[2]+'.'+dateparts[1]+'.'+dateparts[0];
            
            template = template.replace("###1",d);
			template = template.replace("###2",newsItems[i]['titel']);
           
            if (typeof(newsItems[i]['subtitel'])!='undefined')
            template = template.replace("###sub",newsItems[i]['subtitel']); else
            template = template.replace("###sub",''); 
           
            var linkje = "<a class='agendalink' href='/nieuws/?itemId=125&nieuwsID=###4&updatecal&kaldat="+memdate+"&from="+memfrom+"&updatebig&dontLoad=1&bdat="+memdate+"'>klik voor meer details >>>>>>></a>";
		    
            var nieuwsvolledig = __cleanUpSummary(newsItems[i]['tekst']);
        	var nieuws = __cleanUpSummary(newsItems[i]['samenvatting']);
            
            if (nieuwsvolledig!="") {
				if (newsItems[i]['samenvatting'] != '')
				{
	                template = template.replace("###3",nieuws+linkje);
				}
				template = template.replace("###4",newsItems[i]['itemid']);
            } else if (nieuws!=""){
                template = template.replace("###3",nieuws);
            } else {
                template = template.replace("###3","");
            }
			html += template;
	 	}
	 }
     
     if (html==""){
         html += "<div class='noagendaitem'>Op deze datum zijn geen agenda items...</div>";
     }
	 
	 // set the first current item as default 
	 el.innerHTML = html;
	 
	if (firstElement !== true && xxx != false){
		if (document.getElementById("newsmainsuperheader") && typeof(firstElement['subtitel'])!='undefined')
		{
			document.getElementById("newsmainsuperheader").innerHTML = 	firstElement['subtitel'];
		}	
		if (document.getElementById("newsmainheader") )
		{
			document.getElementById("newsmainheader").innerHTML = 	firstElement['titel'];
		} 
		if (document.getElementById("newsmainbody") )
		{
			document.getElementById("newsmainbody").innerHTML = 	firstElement['tekst'];
		}		
	 }
     
     /*if (res.data.currentNewsItem && !dontadjust){
         var parts = res.data.currentNewsItem.begindatum.split("-");
         var d=parts[2]+'/'+parts[1]+'/'+parts[0];
      //   document.getElementById('bigdate').innerHTML = d;
         document.getElementById('newsmainsuperheader').innerHTML = res.data.currentNewsItem.subtitel;
         document.getElementById('newsmainheader').innerHTML = res.data.currentNewsItem.titel;
         if (__cleanUpSummary(res.data.currentNewsItem.samenvatting)!="") res.data.currentNewsItem.tekst = res.data.currentNewsItem.samenvatting + '' + res.data.currentNewsItem.tekst
         if (res.data.currentNewsItem.hasimage!=""){
             document.getElementById('newsmainbody').innerHTML = "<div id='newsillustration'><img id='newsimage' src='"+res.data.currentNewsItem.image+"' ></div>"+res.data.currentNewsItem.tekst;
             setTimeout(__checkimage,100);
         } else {
             
             document.getElementById('newsmainbody').innerHTML = "<div id='newsillustration'></div>"+res.data.currentNewsItem.tekst;
             
         }
         
     }*/
     
  }
  
  function updateListSimple(res){ 
      updateList(res,false,true);
  }
  
  memdate=false; 
  memfrom = 'false';
  
  //restores agenda to previous state -Gabor de Mooij
  window.onload=(function(){

  	 var vars = document.location.href.split("&");
  
	   for(var j in vars){
		   pair = vars[j].toString().split("=");
		   window[pair[0]]=pair[1]; 
   		}

 /* if (document.location.href.indexOf("updatebig") != -1)
  {
 
   
    
    var bDate = new Date();
     bDate.setTime(parseInt(bdat,10));
       document.getElementById("bigdate").innerHTML=__f(bDate.getDate())+'/'+__f(bDate.getMonth()+1)+'/'+bDate.getFullYear();    
   
    
  }*/
  if (document.location.href.indexOf("updatecal") != -1)
  {
           
           
           aDate = new Date();
           aDate.setTime(parseInt(kaldat,10));
           
          __cal.setDate(aDate);
          
          
         
          __cal.dateClicked= ((from=='false') ? true : false) ;
          
          dateChanged(__cal,true);      
  }
  setTimeout(__checkimage,100);
  });
  
  
  
  
  
  //SERVER.send('news',{method:'getEvents',date:dateString,from:onlyMonth},updateList);
  