///////////////////////////////////////////////////////////////
// TWSCalendar
////////////////////////////////////////////////////////////////
//SmoothMain.cachePage(/\?page=calendar\/admin_list.php/);
if(self.jQuery) {
  (function(){var a=false,c=/xyz/.test(function(){xyz})?/\b_super\b/:/.*/;jQuery.Class=function(){};jQuery.Class.create=function(h){var g=this.prototype;a=true;var f=new this();a=false;for(var e in h){f[e]=typeof h[e]=="function"&&typeof g[e]=="function"&&c.test(h[e])?(function(i,j){return function(){var l=this._super;this._super=g[i];var k=j.apply(this,arguments);this._super=l;return k}})(e,h[e]):h[e]}function d(){if(!a&&d.prototype.init){return d.prototype.init.apply(this,arguments)}}d.prototype=f;d.prototype.constructor=d;d.extend=arguments.callee;return d};jQuery.querySelectorAll=function(){return jQuery.apply(jQuery,arguments)};jQuery.querySelector=function(){return jQuery.querySelectorAll.apply(jQuery,arguments)[0]};jQuery.fn.forEach=function(d){return this.each(function(e){d(this,e)})};jQuery.fn.attach=function(e){var d=e.attach||(new e).attach||function(){};return this.forEach(function(f){d.call(e,f)})};jQuery.DOM=b(["prepend","append",["before","insertBefore"],["after","insertAfter"],"wrap","wrapInner","wrapAll","clone","empty","remove","replaceWith",["removeAttr","removeAttribute"],["addClass","addClassName"],["hasClass","hasClassName"],["removeClass","removeClassName"],["offset","getOffset"]],[["text","Text"],["html","HTML"],["attr","Attribute"],["val","Value"],["height","Height"],["width","Width"],["css","CSS"]]);jQuery.Traverse=b([["children","getChildElements"],["find","getDescendantElements"],["next","getNextSiblingElements"],["nextAll","getAllNextSiblingElements"],["parent","getParentElements"],["parents","getAncestorElements"],["prev","getPreviousSiblingElements"],["prevAll","getAllPreviousSiblingElements"],["siblings","getSiblingElements"],["filter","filterSelector"]]);jQuery.Events=b([["bind","addEventListener"],["unbind","removeEventListener"],["trigger","triggerEvent"],"hover","toggle"]);jQuery.fn.buildAnimation=function(e){var d=this;return{start:function(){d.animate(e)},stop:function(){d.stop()}}};jQuery.Effects=b(["show","hide","toggle","buildAnimation","queue","dequeue"]);jQuery.fn.ajax=jQuery.ajax;jQuery.Ajax=b([["ajax","request"],["load","loadAndInsert"],["ajaxSetup","setup"],["serialize","getSerializedString"],["serializeArray","getSerializedArray"]]);function b(e,d){var f={};jQuery.each(d||[],function(h,g){if(!(g instanceof Array)){g=[g,g]}e.push([g[0],"get"+g[1]],[g[0],"set"+g[1]])});jQuery.each(e,function(h,g){var j=g;if(g instanceof Array){j=g[1];g=g[0]}f[j]=jQuery.Class.create({init:function(){var i=Array.prototype.slice.call(arguments);if(this.constructor==f[j]){this.arguments=i}else{return f[j].prototype.attach.apply(f[j],i)}},arguments:[],attach:function(l){var i=arguments.length==1?this.arguments:Array.prototype.slice.call(arguments,1);if(i.length){var k=i[i.length-1];if(typeof k=="function"){i[i.length-1]=function(){var m=Array.prototype.slice.call(arguments);return k.apply(this,[this].concat(m))}}}return jQuery.fn[g].apply(jQuery(l),i)}})});return f}})();
  self.TWSCalendar = {}; //$.Class.create();
}else
  self.TWSCalendar = Class.create();

self.TWSCalendar_calendars = {};
self.TWSCalendar.prototype = {
  keypresscounter: 0,
  initialize: function(el, options) {
    try{
    
    if(self.jQuery)
      var Object = $;
    else
      var Object = self.Object;
    this.target = $('#'+el);
    if(this.target.get) this.target = this.target.get(0);
    this.options = Object.extend({
      url: "/calendar/ajax_calendar.php"
      ,format: "glg"
      ,yr: ""
      ,mo: ""
      ,da: ""
    }, options || {});
    if(this.options.format == "glg") {
      this.options = Object.extend({
        titleformat:"F Y"
        ,range: "m"
        ,controls:"{today} {selector} {prev}{next}"
        ,prevtext:"&lt;&lt;"
        ,nexttext:"&gt;&gt;"
        ,showweeks:true
        ,showevents:true
        ,cellheight:90
        ,listener:true
      }, this.options || {});
      this.draw();
    }
    else if(this.options.format == "gsm") {
      this.options = Object.extend({
        titleformat:"F Y"
        ,controls:"<div style='float:left;'>{prev}</div> <div style='float:right;'>{next}</div><div style='clear:both;'></div>"
        ,prevtext:"&lt;&lt;"
        ,nexttext:"&gt;&gt;"
        ,showweeks:true
        ,showevents:false
      }, this.options || {});
      this.draw();
    }
    else if(this.options.format == "gy") {
      this.options = Object.extend({
        titleformat:"Y"
        ,subtitleformat:"M"
        ,controls:"<div style='float:left;'>{prev}</div> <div style='float:right;'>{next}</div><div style='clear:both;'></div>"
        ,prevtext:"&lt;&lt;"
        ,nexttext:"&gt;&gt;"
        ,showweeks:true
        ,showevents:false
      }, this.options || {});
      this.draw();
    }
    else if(this.options.format == "list") {
      this.options = Object.extend({
        titleformat:"F Y"
        ,controls:"<div style='float:left;'>{prev}</div> <div style='float:right;'>{next}</div><div style='clear:both;'></div>"
        ,prevtext:"&lt;&lt;"
        ,nexttext:"&gt;&gt;"
        ,showweeks:true
        ,showevents:false
      }, this.options || {});
      this.draw();
    }
    else {
      alert("INVALID FORMAT FOR TWSCALENDAR");
      return;
    }
    TWSCalendar_calendars[this.target.id] = this;
    }catch(e){
      alert("??"+e.message);
    }
    /*
    if(this.options.keypress && !TWSCalendar.keypresscounter++) {
      // register eventHandlerFunction to the onclick of myObject 
      if(jQuery)
        $(window).bind('keypress',this.keyPress);
      else
        Event.observe(window, "keypress", this.keyPress.bind(this), false);
    }*/

    // removes the event handler 
//    Event.stopObserving(myObject, "click", eventHandlerFunction, false);
  },
  keyPress: function(e) {
    if(e.ctrlKey) {
      var offset = 0;
      if(e.keyCode == 37) // left
        offset = -1;
      else if(e.keyCode == 38) // up
        offset = 12;
      else if(e.keyCode == 39) // right
        offset = 1;
      else if(e.keyCode == 40) // down
        offset = -12;
      if(offset != 0)
        TWSCalendar.setDate(this.target.id, offset);
    }
  },
  draw: function() {
    $(".cal-loader",this.target).show();
    var date = new Date();
    var parameters = '&el='+this.target.id
                   + '&fm='+this.options.format
                   + '&d='+this.options.yr+'-'+this.options.mo+'-'+(this.options.da?this.options.da:1)
                   + '&r='+this.options.range
                   + '&e='+((this.options.events)?1:0)
                   + '&t='+date.getTime( )
                   + '&xhr=1'
                   ;
    var target = this.target; 
    if(self.jQuery) 
      $.get(this.options.url+'?',parameters,function(data){ $(target).html(data); });
    else
      var myAjax = new Ajax.Updater(this.target, this.options.url, {method: 'get', parameters: parameters});
  },
  setDate: function(src,offset) {
    var yr = null;
    var mo = null;
    var da = null;
    var stroffset = String(offset);
    if(stroffset.match(/^-?[0-9]+$/)) {
      if(self.jQuery){
        yr = parseInt($("#"+src+"_yr").val());
        mo = parseInt($("#"+src+"_mo").val());
      } else {
        yr = parseInt($(src+"_yr").value);
        mo = parseInt($(src+"_mo").value);
      }
      mo += parseInt(offset);
      while(mo < 1) {
        mo += 12;
        yr--;
      }
      while(mo > 12) {
        mo -= 12;
        yr++;
      }
    }
    else if(stroffset.match(/^\d{4}-\d{1,2}/)) {
      var vals = stroffset.split("-");
      yr = vals[0];
      mo = vals[1];
    }
    if(yr && mo) {
      for(var i in TWSCalendar_calendars) {
        TWSCalendar_calendars[i].options.yr = yr;
        TWSCalendar_calendars[i].options.mo = mo;
        TWSCalendar_calendars[i].draw();
      }
    }
    return false;
  }
};

var setDate = TWSCalendar.prototype.setDate;
if(self.jQuery){
  TWSCalendar.prototype.init = TWSCalendar.prototype.initialize;
  TWSCalendar = $.Class.create(TWSCalendar.prototype);
}
TWSCalendar.setDate = setDate;
