﻿// jQuery Month Calendar Plugin 1.0 Copyright 2009 Jarrett Vance http://jvance.com/pages/jQueryMonthCalPlugin.xhtml
(function ($) {
  $.fn.calendar = function (options) {
	var opts = $.extend({}, $.fn.calendar.defaults, options);
    return this.each(function () {
      var $this = $(this);
      $this.find('td')
        //.hover(function () { $(this).addClass('hover') }, function () { $(this).removeClass('hover') })
        .click(function () { return changeDay(new Date($(this).find('a').attr('alt')), opts, $(this).find('a').attr('id')); });
      $this.find('a[rel=prev], a[rel=next]').click(function () {
        changeMonth($this, opts, ($(this).attr('rel') == 'next'));
        return false;
      });
      refreshCal($this, opts);
    });
  }

  function changeMonth($cal, opts, next) {
    if (next && opts.month == 11) {
      opts.year = opts.year + 1;
      opts.month = 0;
    } else if (!next && opts.month == 0) {
      opts.year = opts.year - 1;
      opts.month = 11;
    } else {
      opts.month = next ? opts.month + 1 : opts.month - 1;
    }
    refreshCal($cal, opts);
  }

  function changeDay(date, opts, nr) {
	if (nr) { //nr = id on vaid üritustega kuupäevadel
	  //opts.current = date;
	  //opts.current = date.getDate();
	  //opts.year = date.getFullYear();
	  //opts.month = date.getMonth();
		
	  var day = date.getDate();
	  var year = date.getFullYear();
	  var month = date.getMonth();
	    
	  //cookies
	  //createCookie('kuupaev',opts.current+'.'+opts.month+'.'+opts.year,1);
	  createCookie('kuupaev',day+'.'+month+'.'+year,1);
	}
  };

  function refreshCal($cal, opts) {
	$cal.find('a[rel=prev], a[rel=next]').removeClass('hidden');
	var praegu = new Date();
	var kuu = praegu.getMonth();
	var aasta = praegu.getFullYear();
	if (opts.month == kuu && opts.year == aasta) {
	  $cal.find('a[rel=prev]').removeClass('pointer').addClass('hidden');
	}
    $cal.find('.month').text(monthNames[opts.month] + ' ' + opts.year);
    $cal.find('td').removeClass('out').removeClass('bold').removeClass('today').removeClass('current');
    var days = getDaysInMonthForDate(opts.year, opts.month, opts.current);
    var tds = $cal.find('td');
    var paevad = new Array();
    for (j = 0; j < 42; j++) {
  	  if (!days[j].out && j == 0) {
  		paevad[0] = '0';
  		paevad[1] = '0';
  	  }
  	  if ((j == 0) || (j == 41)
  		|| (days[j+1] && ((days[j].out && !days[j+1].out) || (!days[j].out && days[j+1].out)))
  		|| (days[j-1] && ((!days[j].out && days[j-1].out) || (days[j].out && !days[j-1].out)))) {
    	ddd = days[j].date;
      	paev = ddd.getDate().toString();
      	kuu = (ddd.getMonth() + 1).toString();
      	aasta = ddd.getFullYear().toString();
      	paevad[paevad.length] = aasta+'-'+kuu+'-'+paev;
      	if (days[j+1] && days[j].out && !days[j+1].out && j == 0) {
      	  paevad[paevad.length] = aasta+'-'+kuu+'-'+paev;
      	}
      }
    }
    
    $('#cal').fadeTo("fast", 0.3);
    $('#cal').queue(function() {
      newinfo($cal, opts, paevad, tds, days);
      $(this).dequeue();
    });
    $('#cal').fadeTo("fast", 1);
  }
  
  function newinfo($cal, opts, paevad, tds, days) {
	var ajaxRequest;  // The variable that makes Ajax possible!
	try{
		// Opera 8.0+, Firefox, Safari
		ajaxRequest = new XMLHttpRequest();
	} catch (e){
		// Internet Explorer Browsers
		try{
			ajaxRequest = new ActiveXObject("Msxml2.XMLHTTP");
		} catch (e) {
			try{
				ajaxRequest = new ActiveXObject("Microsoft.XMLHTTP");
			} catch (e){
				// Something went wrong
				return false;
			}
		}
    }
    ajaxRequest.open('GET','./yritused_kalender?action=getevents&ykp0='+paevad[0]+'&ykp1='+paevad[1]+'&ykp2='+paevad[2]+'&ykp3='+paevad[3]+'&ykp4='+paevad[4]+'&ykp5='+paevad[5],false);
    ajaxRequest.send();
    yritused_kalendris = ajaxRequest.responseText;
    //document.write(yritused_kalendris);
	info = yritused_kalendris.split(';');
	yritusi = info[0].split(',');
	if (info[1]) yritusxxx = info[1].split(',');
	i=k=0;
	for (j = 0; j < 42; j++) {
	  var arv_ = yritusi[j].substring(0,2)
	  var arv = arv_.replace(/^\s+|\s+$/g, '')
	  $(tds[j]).find('a').removeClass('hover').addClass('text');//.unbind('click');
	  $(tds[j]).removeClass('hover');
	  $(tds[j]).find('a').attr('title', '');
	  if (days[j].out) {
		$(tds[j]).addClass('out');
    	$(tds[j]).find('a').removeClass('hover').addClass('text');
	  }
	  else {
		if (arv == 0) {
		  $(tds[j]).removeClass('hover');
	      $(tds[j]).find('a').removeClass('hover').addClass('text');//.unbind('click');
        }
		else {
		  $(tds[j]).find('a').removeClass('text');//.bind('click', 'function () { return changeDay(new Date($(tds[j]).find("a").attr("alt")), opts); }');
		  $(tds[j]).find('a').attr('title', yritusi[j]).attr('id', j);
		  $(tds[j]).addClass('bold');
		  if (arv == 1) {
			$(tds[j]).find('a').attr('href', getUrl('', opts, yritusxxx[i]));//.attr('onmouseover','this.style.cursor="pointer"');
		    i++;
		  }
		  else {
			$(tds[j]).find('a').attr('href', getUrl(days[j].date, opts));//.attr('onmouseover','this.style.cursor="pointer"');
		  }
		}
	  }
      $(tds[j]).find('a').text(days[j].date.getDate()).attr('alt', days[j].date.toDateString());
      if (days[j].current) $(tds[j]).addClass('current');
      else if (days[j].today) $(tds[j]).addClass('today');
      else $(tds[j]).addClass('actmonth');
      //k++;
      //if ((k == 6) || (k == 7)) { $(tds[j]).addClass('weekend'); }
      //if (k == 7)  { k = 0; }
	}
  }
  
  function getUrl(date, opts, id) {
	if (id) {
	  var url = opts.eventUrl;
	  url = url.replace("yrituse_id", id);
	}
	else {
	  var url = opts.templateUrl;
	  var aa = new RegExp(opts.templateYear,"gi");
	  var kk = new RegExp(opts.templateMonth,"gi");
	  var pp = new RegExp(opts.templateDay,"gi");
	  url = url.replace(aa, date.getFullYear());
	  url = url.replace(kk, ((date.getMonth() + 1) < 10 ? "0" : "") + (date.getMonth() + 1));
	  url = url.replace(pp, (date.getDate() < 10 ? "0" : "") + date.getDate());
	}
    return url;
  }


  function getDaysInMonthForDate(year, month, current) {
    var today = new Date();
    var first = new Date(year, month, 1);
    first.setDate(first.getDate() - first.getDay());
    var days = new Array(42);
    var x = 0;
    for (j = 0; j < 42; j++) {
      var d = new Date(first);
      d.setDate(first.getDate() + j);
      ddd = d.toString().substr(0,10);
      weekday = ddd.substr(0,3);
      day = parseInt(ddd.substr(7,10));
      var d = new Date(first);
      if (j == 0 && day == 1 && weekday == 'Sun') {
    	  x = 1;
      }
      if (x == 1) {
    	  d.setDate(first.getDate() + j-6);
      }
      else {
    	  d.setDate(first.getDate() + j+1);
      }
      days[j] = {
        date: d,
        out: !(d.getFullYear() == year && d.getMonth() == month),
        today: d.getFullYear() == today.getFullYear() && d.getMonth() == today.getMonth() && d.getDate() == today.getDate(),
        current: d.getFullYear() == current.getFullYear() && d.getMonth() == current.getMonth() && d.getDate() == current.getDate()
      }
    }
    return days;
  };

  $.fn.calendar.defaults = {
    current: new Date(),
    year: new Date().getFullYear(),
    month: new Date().getMonth(),
    templateYear: 'year',
    templateMonth: 'month',
    templateDay: 'day',
    templateUrl: '/yritused?filter_otsing_yritus_fraas=&tyhi_main_otsing=1&tyyp=yritus&laiendatud_otsing=1&filter_otsing_yritus_kuupaev=koik&_alates=&_kuni=&filter_otsing_yritus_kuupaev_alates=day.month.year&filter_otsing_yritus_kuupaev_kuni=day.month.year&filter_otsing_yritus_korraldaja=&filter_otsing_yritus_liik=0&filter_otsing_yritus_valista_fraas=&tyyp=yritus&page_otsing_yritus=1',
    templateUrl2: '/yritused?laiendatud_otsing=1&filter_otsing_yritus_kuupaev_alates=day.month.year&filter_otsing_yritus_kuupaev_kuni=day.month.year',
    eventUrl: '/yritused?id=yrituse_id',
    dateChanged: function (date) { return true; }
  };
  $().ready(function () {
	var now = new Date();
	date = now.getDate();
	month = now.getMonth();
	year = now.getFullYear();
    var kuupaev = readCookie('kuupaev');
	if(kuupaev){
	  aeg = kuupaev.split('.');
	  if ((!parseInt(aeg[0]) == 0) && (!parseInt(aeg[2]) == 0)) {
        aasta = parseInt(aeg[2]);
        kuu = parseInt(aeg[1]);
		if (aasta == year && kuu < month) {
		  eraseCookie('kuupaev');
		}
		else {
		  date = parseInt(aeg[0]);
          month = kuu;
          year = aasta;
		}
	  }
    }
  	$('#cal').calendar({ year: year, month: month, current: new Date(year, month, date) });
  });
})(jQuery);

function createCookie(name,value,days) {
	if (days) {
		var date = new Date();
		date.setTime(date.getTime()+(days*24*60*60*1000));
		var expires = "; expires="+date.toGMTString();
	}
	else var expires = "";
	document.cookie = name+"="+value+expires+"; path=/";
}

function readCookie(name) {
	var nameEQ = name + "=";
	var ca = document.cookie.split(';');
	for(var i=0;i < ca.length;i++) {
		var c = ca[i];
		while (c.charAt(0)==' ') c = c.substring(1,c.length);
		if (c.indexOf(nameEQ) == 0) return c.substring(nameEQ.length,c.length);
	}
	return null;
}

function eraseCookie(name) {
	createCookie(name,"",-1);
}

