function AddDay(i,j) {  
  Droppables.add('day-'+i+'-'+j,{
     accept: 'instance',
     onDrop: function(drag,drop) {
        dropdatetime = parseInt(drop.getAttribute('datetime'));
        location_id = parseInt(drag.getAttribute('location_id'));		  
		  event_mode = drag.getAttribute('mode');
        if (event_mode == 'move') {
		     event_id = parseInt(drag.id.substring(5));
           drag.style.top = 0;
           drag.style.left = 0;
           drag.style.opacity = 1;
           drop.appendChild(drag);			  
			  event = events.events_changeDate(event_id,dropdatetime,event_datechanged); 
			  waitBox = Ext.MessageBox.wait('Saving Move...');
        } else if (event_mode == 'create') {		     
           draggables[drag.id].destroy();
           newdrag = drag.cloneNode(false);
			  nextid++;
           newdrag.id = 'tmp'+nextid;           
           newdrag.style.top = 0;
           newdrag.style.left = 0;
           newdrag.style.opacity = 1;
           newdrag.title = 'Processing...';                        
           drop.appendChild(newdrag);
           newdrag.style.position = 'relative';               
           drag.parentNode.appendChild(drag);
           drag.style.top = 0;
           drag.style.left = 0;
           drag.style.opacity = 1;           
           draggables[drag.id] = new Draggable(drag.id,{revert:true,ghosting:true});                      
           event = events.events_addEvent(dropdatetime,location_id,event_added);
			  waitBox = Ext.MessageBox.wait('Adding Event...');
        }
     }});
}

function initPage() {
   if (window.XMLHttpRequest) {	   
		var iconbar = document.getElementById('instance_icons');
		iconbar.style.display = 'block';
		var warning = document.getElementById('editor_warning');
		warning.style.display = 'none';
		var today = new Date();	
		var startcount = 0;	
      var is_officer = events.events_isRaidLeader();
   	for (i=0;i<4;i++) {
			for (j=0;j<7;j++) {		   
		   	if (!is_officer) {			   
			   	if (i==0 && j==today.getDay()) {
				   	startcount = 1;
					}
					if (startcount==8) {
				   	continue;
					}
					if (startcount > 0) {
				   	startcount++;
					}
		   	}
				if (i==0 && j < today.getDay()) {
			   	continue;
				}
				AddDay(i,j);
			}
   	}	
   	draggables['eventeditform'] = new Draggable('eventeditform',{handle: 'eventeditform-title'});
   
   	document.oncontextmenu = ContextMenu;
   	document.onclick = NormalClick;
   
   	addEventDraggables();
		addLocationDraggables();
	}
}

function event_added(event) {   
	if (event.event_id > 0) {	   
	   eventimg = document.getElementById('tmp'+nextid);
		eventimg.id = 'event'+event.event_id;
		eventimg.setAttribute('mode','move');
		eventimg.setAttribute('topic_id',event.topic_id);
		eventimg.setAttribute('mode','move');
		eventimg.setAttribute("ondblclick","document.href = '/forums/viewtopic.php?t="+event.topic_id+"';");
		draggables[eventimg.id] = new Draggable(eventimg.id,{revert:true});
		waitBox.alert('Creation Status', 'Event created.');
	} else if (event.event_id == -1) {
		waitBox.alert('Creation Status', 'Access Denied... beyotch');
	} else {
		waitBox.alert('Creation Status', 'Event creation failed. 42');
	}
}

function NormalClick(evt) {
  var menu = document.getElementById('calendarcontextmenu');
  //var eventpopup = document.getElementById('event_popup');
  var editform = document.getElementById('eventeditform');
  if (menu.style.display == 'block') {
     menu.style.display = 'none';
  }         
  return true;
}
function ContextMenu(evt) {
  var menutop = 0;
  var menuleft = 0;
  var target;
  if (window.ActiveXObject) {
     target = event.srcElement;
     menuleft = event.clientX + document.body.scrollLeft + 10;
     menutop = event.clientY + document.body.scrollTop + 200;
  } else {
     target = evt.target;
     menuleft = evt.pageX + 10;
     menutop = evt.pageY;
  }
  if (target.className == 'instance' && target.parentNode.className == 'dateevents') {
     targetevent = target.id;
     var event_user_id = target.getAttribute('user_id');
     var is_officer = events.auth_isOfficer();     
     var user_id = events.auth_getUserId();
	  if (event_user_id == user_id || is_officer) {
    	  var topic_id = target.getAttribute('topic_id');
        var event_id = parseInt(targetevent.substr(5));
         
        var topic_link = document.getElementById('context_thread');
        if (topic_id > 0) {                  
           topic_link.href = '/forums/viewtopic.ph'+'p?t='+topic_id;
        } else {
           topic_link.href = '/forums/viewforum.ph'+'p?f=15';
        }
        
		  if (is_officer) {
		     var event_signups = document.getElementById('event_signups');
		     event_signups.href = '/events/admin/signups.ph'+'p?id='+event_id;		  
		  }
        var instmenu = document.getElementById('calendarcontextmenu');
        instmenu.style.display = 'block';
        instmenu.style.top = menutop+'px';
        instmenu.style.left = menuleft+'px';                    
        return false;	     
	  } else {
		  return true;
	  }
  } else {
     return true;
  }
}         
function cancelevent() {
  if (targetevent != 0) {
     var answer = confirm("Delete this event and all associated data?");
	  if (answer) {
	     event_id = parseInt(targetevent.substring(5));		  
		  event = events.events_removeEvent(event_id,event_removed);
		  waitBox = Ext.MessageBox.wait('Adding Event...');
        target = document.getElementById(targetevent);
        target.parentNode.removeChild(target);
        targetevent = 0;
	  }
  }
}

function event_removed(event) {
   if (event) {
	   waitBox.alert('Cancellation Status', 'Event cancelled.');
	}
}

function event_datechanged(event) {
   if (event) {
	   waitBox.alert('Move Status', 'Date change saved!');
	} else {
	   waitBox.alert('Move Status', 'Date change failed!.');		
	}
}

function event_updated(event) {
   //waitBox.hide();
	if (event) {
	   waitBox.alert('Update Status', 'Event successfully updated.');
	} else {
		waitBox.alert('Update Status', 'Event update failed!!');
	}	
}

function editevent() {
  if (targetevent != 0) {
     var event = document.getElementById(targetevent);	  
	  chooseSel(document.getElementById('starttime'),event.getAttribute('event_when'));
     chooseSel(document.getElementById('rallytime'),event.getAttribute('event_rally'));
	  chooseSel(document.getElementById('cutofftime'),event.getAttribute('event_cutoff'));
	  var rallypoint = document.getElementById('rallypoint');
	  rallypoint.value = event.getAttribute('rallypoint');	  	  	  
	  
	  var heroicmode = document.getElementById('heroicmode');	  
	  var heroiccheck = document.getElementById('heroic');	  
	  heroiccheck.checked = false;	  
	  
	  var heroic = event.getAttribute('heroic');	  
	  if (heroic == 1) {
	     var	is_heroic = event.getAttribute('is_heroic');		  
		  if (is_heroic == 1) {
		  	  heroiccheck.checked = true;
		  }		  
		  heroicmode.style.display = 'block';
	  } else {
	  	  heroicmode.style.display = 'none';
	  }
     var target = document.getElementById('eventeditform');
     var menu = document.getElementById('calendarcontextmenu');
     target.style.top = menu.style.top;
     target.style.left = menu.style.left; 
     target.style.display = 'block';
  }
}

function chooseSel(sel,val) {
   for (i=0;i<sel.length;i++) {
	   if (sel[i].value == val) {
		   sel.selectedIndex = i;
		}
	}
}

function editInstance() {
  alert('Edit Instance!');
}

var waitBox = Ext.MessageBox;

function updateEvent(editform) {   
	var event = document.getElementById(targetevent);
   var event_id = parseInt(targetevent.substring(5));
	editform.style.display = 'none';
	var starttime = document.getElementById('starttime');
	var event_when = starttime.options[starttime.selectedIndex].value;
	event.setAttribute('event_when',event_when);	
	var rallytime = document.getElementById('rallytime');
	var event_rally = rallytime.options[rallytime.selectedIndex].value;
	event.setAttribute('event_rally',event_rally);
	var cutofftime = document.getElementById('cutofftime');
	var event_cutoff = cutofftime.options[cutofftime.selectedIndex].value;
	event.setAttribute('event_cutoff',event_cutoff);
	var rallypoint = document.getElementById('rallypoint');
	rallypoint = rallypoint.value;
	event.setAttribute('rallypoint',rallypoint);
	var heroiccheck = document.getElementById('heroic');	
	var heroic = 0;
	if (heroiccheck.checked) {
		heroic = 1;
	}	
	event.setAttribute('is_heroic',heroic);	
	event = events.events_updateEvent(event_id,event_when,event_rally,event_cutoff,rallypoint,heroic,event_updated);
	waitBox = Ext.MessageBox.wait('Updating Event');
}

var EventCalendar = function() {
	var dialog, showBtn;
	
	return {
		init : function() {
			initPage();
		}
	}
}();

Ext.onReady(EventCalendar.init, EventCalendar, true);
