function getEvents(){
	var padding = 2;

	var elements = document.getElementsByName("movableCalendarEvent");
	for(var i=0; i<=elements.length-1; i++){
		var position = elements[i].id.substring(3); 
		var target = document.getElementById(position);
		var targetPos = findPos(target);
		elements[i].style.top=(targetPos[1] + padding ) + "px";
		elements[i].style.left=(targetPos[0] + padding) + "px";
		elements[i].style.display="block";
	}
}

function findPos(obj) {
	var curleft = curtop = 0;
	if (obj.offsetParent) {
		do {
			curleft += obj.offsetLeft;
			curtop += obj.offsetTop;
		} while (obj = obj.offsetParent);
	}
	return [curleft,curtop];
}

function makeSolid(){
	makeSolidBlocks(document.getElementsByTagName("td"), 'event');
	makeSolidBlocks(document.getElementsByTagName("div"), 'weeklyevent');	
}

function makeSolidBlocks(tags, key){
	try{
	var positionMap=new Object();

	for(var i=0; i<=tags.length-1; i++){
		if(tags[i].id.indexOf(key) == 0){
			var id=tags[i].id.substring(tags[i].id.indexOf(".")+1, tags[i].id.lastIndexOf("."));
			var num=tags[i].id.substring(tags[i].id.lastIndexOf(".")+1);
			if(positionMap[id] == null){
				positionMap[id]=new Object();
				positionMap[id].topLeft = findPos(tags[i])[0]; 
				positionMap[id].topTop = findPos(tags[i])[1];
				positionMap[id].bottomRight = positionMap[id].topLeft + tags[i].offsetWidth;
				positionMap[id].bottomBottom = positionMap[id].topTop + tags[i].offsetHeight;
				positionMap[id].firstNum = num;
				if(tags[i].childNodes){
					var children=tags[i].childNodes;
					for(i=0; i<=children.length-1; i++){
						//children.item(i).style.display = null;
						if(children[i].tagName == 'DIV'){
							children[i].style.display = 'block';
						} else {
							children[i].style.display = 'block';						
						}
					}
				}

			} 
			
			if(positionMap[id].bottomRight < findPos(tags[i])[0] + tags[i].offsetWidth){
				positionMap[id].bottomRight = findPos(tags[i])[0] + tags[i].offsetWidth;
			} 
			positionMap[id].bottomBottom = findPos(tags[i])[1] + tags[i].offsetHeight;
			
			if(num > positionMap[id].firstNum){
				tags[i].style.visibility="hidden";
			} else {
				tags[i].style.visibility="visible";
			}
			
			if(document.getElementById(key + "." + id + "." + positionMap[id].firstNum)){
				document.getElementById(key + "." + id + "." + positionMap[id].firstNum).style.position="absolute";
				document.getElementById(key + "." + id + "." + positionMap[id].firstNum).style.height=(positionMap[id].bottomBottom-positionMap[id].topTop-1) + "px"; 
				document.getElementById(key + "." + id + "." + positionMap[id].firstNum).style.width=(positionMap[id].bottomRight-positionMap[id].topLeft-8) + "px";
			}
		}
	}
	} catch(e) {
	}
}

function makeSolidDIV(){
	var tags=document.getElementsByTagName("td");
	var positionMap=new Object();
	
	for(var i=0; i<=tags.length-1; i++){
		if(tags[i].id.indexOf("event") == 0){
			var id=tags[i].id.substring(tags[i].id.indexOf(".")+1, tags[i].id.lastIndexOf("."));
			var num=tags[i].id.substring(tags[i].id.lastIndexOf(".")+1);
			if(num == 1){
				positionMap[id]=new Object();
				positionMap[id].topLeft = findPos(tags[i])[0]; 
				positionMap[id].topTop = findPos(tags[i])[1];
				var newDiv=document.createElement("span");
				var divId= "span." + id;
				newDiv.id = divId;
				newDiv.className=tags[i].className;
				
				var newDiv2=document.createElement("div");
				newDiv2.style.padding="3px";
				newDiv2.innerHTML = tags[i].innerHTML;
				newDiv.appendChild(newDiv2);
				tags[i].appendChild(newDiv);
			} 
			
			positionMap[id].bottomRight = findPos(tags[i])[0] + tags[i].offsetWidth; 
			positionMap[id].bottomBottom = findPos(tags[i])[1] + tags[i].offsetHeight;
			document.getElementById("span." + id).style.position="absolute";
			document.getElementById("span." + id).style.display="block";
			document.getElementById("span." + id).style.top=(positionMap[id].topTop) + "px"; 
			document.getElementById("span." + id).style.left=(positionMap[id].topLeft) + "px";
			document.getElementById("span." + id).style.height=(positionMap[id].bottomBottom-positionMap[id].topTop) + "px"; 
			document.getElementById("span." + id).style.width=(positionMap[id].bottomRight-positionMap[id].topLeft) + "px";
			
			//tags[i].innerHTML = id + " - " + num + ":" + topTop + "," + topLeft + ":" + bottomBottom + "," + bottomRight;		
		}
	}
}


function setColor(id, id2){
	var tags=document.getElementsByTagName("td");
	for(var i=0; i<=tags.length-1; i++){
		if(tags[i].className.indexOf("active") >= 0){
			tags[i].className=tags[i].className.replace("active", "");
		}
	}
	tags=document.getElementsByTagName("th");
	for(var i=0; i<=tags.length-1; i++){
		if(tags[i].className.indexOf("active") >= 0){
			tags[i].className=tags[i].className.replace("active", "");
		}
	}
	if(document.getElementById(id)){
		document.getElementById(id).className+=" active";
	}
	if(document.getElementById("day" + id2)){
		document.getElementById("day" + id2).className+=" active";
	}
}



function toggleEndType(action, type){
	document.getElementById(action + 'NUMBER').style.display = 'none';
	document.getElementById(action + 'DATE').style.display = 'none';

	if(type != 'NONE'){
		document.getElementById(action + type).style.display = 'block';
	}	
}

function toggleTimeDisplay(action, state){
	document.getElementById(action + 'timechooser1').style.display = (state)?'none':'block';
	document.getElementById(action + 'timechooser2').style.display = (state)?'none':'block';
}

function toggleRecurr(action, state){
	if(state == 'NONE'){
		document.getElementById(action + '.recurrUntil').style.display = 'none';
		document.getElementById(action + '.recurrEvery').style.display = 'none';
		document.getElementById(action + '.recurrOn').style.display = 'none';		
	} else {
		if(state == 'WEEK'){
			document.getElementById(action + '.recurrOn').style.display = null;		
		} else {
			document.getElementById(action + '.recurrOn').style.display = 'none';
		}
		document.getElementById(action + '.recurrUntil').style.display = null;
		document.getElementById(action + '.recurrEvery').style.display = null;
	}
}
	
function escapeQuotes(str){
	return str.replace(/'/g, "\\'");
}

function getWindowHeight(){
	var h=0;
	if(document.body.clientHeight > h){
		h=document.body.clientHeight;
	} 
	if(document.documentElement && document.documentElement.clientHeight > h){
		h=document.documentElement.clientHeight;
	}
	return h;
}
	
function getWindowWidth(){
	var w=0;
	if(document.body.clientWidth > w){
		w=document.body.clientWidth;
	} 
	if(document.documentElement && document.documentElement.clientWidth > w){
		w=document.documentElement.clientWidth;
	}				
	return w;
}

function showAndPosition(currentElement, targetId, topOffset, leftOffset){
	var element=document.getElementById(targetId);
    var pos = findPos(currentElement);
       // alert(pos);
    element.style.top = (pos[1]+topOffset-80) + "px";
        //element.style.left = (pos[0]+leftOffset) + "px";
    element.style.display = "block";
    element.style.zIndex = 10000;
    element.style.position = "absolute";

}
		
function hide(targetId){
	var element=document.getElementById(targetId);
	element.style.display = "none";
}			
			


/* SCHEDULER CODE */
//window.onload = scheduler;

//window.onload = testScheduler;
var dateArray = [];
var styleArray = [2,6,10,12,102];

function testScheduler() {
  randomDatePicker();
  scheduler();
}

function generateSchedule(scheduleBean){                                                                                                                                                                                                                                                                                                                                                                              
	if(typeof(Seam) != "undefined" && scheduleBean != null){
		Seam.Remoting.getContext().setConversationId(getConversationId());       
		var exceptionHandler = function(ex) { };
    	Seam.Remoting.displayLoadingMessage = function() {};
    	Seam.Remoting.hideLoadingMessage = function() {};                                                                                                                                                                                                                                                                                                                                                        
    	Seam.Component.getInstance(scheduleBean).getAllEvents(allEventCallback, exceptionHandler);                                                                                                                                                                                                                                                                                                                                                
//    	Seam.Component.getInstance(scheduleBean).getHourlyEvents(hourlyEventCallback, exceptionHandler);
	}
}                                                                                                                                                                                                                                                                                                                                                                                                                                     
                                                                                                                                                                                                                                                                                                                                                                                                                                  
function allEventCallback(events){                                                                                                                                                                                                                                                                                                                                                                                                 
	allDayEvents(filter(events, true)); 
	scheduler(reorderArray(filter(events, false)));
}                                                                                                                                                                                                                                                                                                                                                                                                                                     

function filter(ea, allDay){
  var tmp = new Array();
  var j=0;
  for (var i = 0; i < ea.length; i++) {
	  if(ea[i].allDay == allDay){
		  tmp[j++]=ea[i];
	  }
  }
  return tmp;
}

function allDayEventCallback(events){                                                                                                                                                                                                                                                                                                                                                                                                 
	allDayEvents(events);                                                                                                                                                                                                                                                                                                                                                                                                             
}                                                                                                                                                                                                                                                                                                                                                                                                                                     
                                                                                                                                                                                                                                                                                                                                                                                                                                  
function hourlyEventCallback(events){
	scheduler(reorderArray(events));
}      


function reorderArray(eventArray) {
  var tempArray = new Array();
  tempArray[0] = 0;
  var ea = eventArray;  
  
  //First order array by start time

  while (ea.length > 0) {
      var earliest = ea[0].startTime;
      var longest = ea[0].startTime + ea[0].durationTime; 
      var iEarliest = 0;

      for (var i = 0; i < ea.length; i++) {
          if (ea[i].startTime < earliest) {
              earliest = ea[i].startTime;
              iEarliest = i;
              longest = ea[i].startTime + ea[i].durationTime;
          }
          
          else if (ea[i].startTime == earliest) {
              if (ea[i].startTime + ea[i].durationTime > longest) {
                  earliest = ea[i].startTime;
                  iEarliest = i;
                  longest = ea[i].startTime + ea[i].durationTime;
              }
    	  }
      }

      tempArray[tempArray.length] = ea[iEarliest];                                                                                                                                                                                         
      ea.splice(iEarliest, 1);   
  }
  return tempArray;
}


function allDayEvents(eventArray){                                                                                                                                                                                                                                                                                                                                                                                                    
	  var timesched = document.getElementById('all-day-events');                                                                                                                                                                                                                                                                                                                                                                          
	  var addtotimesched='';                                                                                                                                                                                                                                                                                                                                                                                                              
	  for (var i = 0; i < eventArray.length; i++) {                                                                                                                                                                                                                                                                                                                                                                                       
	      if(eventArray[i].allDay){
	    	  addtotimesched += '<span class="alldaycalevent hasalldayscheduleevent borderedgroup' + eventArray[i].styleTime + ' darkgroupbg' + eventArray[i].styleTime + '">';                                                                                                                                                                                                                                                         
	    	  addtotimesched += '<a href="#" onclick="selectEventById(' + eventArray[i].eventId + ');">' + eventArray[i].bodyText + '</a></span>';
	      }
	  }                                                                                                                                                                                                                                                                                                                                                                                                                                   
	  timesched.innerHTML += addtotimesched;                                                                                                                                                                                                                                                                                                                                                                                              
}                  

function scheduler(eventArray) {
	var $j = jQuery.noConflict();
	var topOffset = 0;
  var timesched = document.getElementById('timesched');
  var addtotimesched = '<div id="timeblocks">';
  var dimensions = new Array();
  dimensions['top'] = new Array();
  dimensions['height'] = new Array();
  dimensions['left'] = new Array();
  dimensions['width'] = new Array();
  dimensions['overlap'] = new Array();
  dimensions['truncated'] = new Array();
  dimensions['toptruncated'] = new Array();
  
  var overlapBlock = new Array();
  var overlapMember = new Array();

  var numItemsAdded = 0;
  var currentPos=0;
  for (var i = 0; i < eventArray.length; i++) {
      if(!eventArray[i].allDay){

	  //dimensions['top'][i] = 2 + 36 * (Math.floor(eventArray[i]['startTime']) - firstTime) + 4 * 8 * (eventArray[i]['startTime'] - Math.floor(eventArray[i]['startTime']));
  	
  	var top = firstTime;
  	if(eventArray[i].startTime >= firstTime){
  		top = eventArray[i].startTime;
  	}
  	
  	var bottom = lastTime;
  	
    var positionElement = document.getElementById("timesched." + top);                                                                                                                                                                     
    var timeSchedTopJQ = $j("#timesched\\." + String(top).replace("\.", "\\\."));                                                                                                                                                          
    var timeSchedBottomJQ = $j("#timesched\\." + String(bottom).replace("\.", "\\\."));                                                                                                                                                    
    var scheduleEventJQ = $j("#schedule-events");                                                                                                                                                                                          
    var firstTimeJQ = $j("#timesched\\." + String(firstTime).replace("\.", "\\\."));                                                                                                                                                       
    var allDayEvents = $j("#all-day-events");              
  	
  	if(timeSchedTopJQ){
  		 var bottomElement = timeSchedBottomJQ.offset().top - firstTimeJQ.offset().top + allDayEvents.height();
//  		dimensions['top'][currentPos] = findPos(positionElement)[1] - findPos(document.getElementById("timesched." + firstTime))[1] - 10 + (document.getElementById('all-day-events').offsetHeight);
   		 
  		 if(eventArray[i].startDate){
  			 dimensions['top'][currentPos] = timeSchedTopJQ.offset().top - scheduleEventJQ.offset().top - 30 + allDayEvents.height(); //firstTimeJQ.offset().top; 
  			dimensions['toptruncated'][currentPos] = eventArray[i].topTruncated;
  		 } else {
  			 dimensions['top'][currentPos] =  allDayEvents.height() - 30; //firstTimeJQ.offset().top;   
  			dimensions['toptruncated'][currentPos] = true;
  		 }
  		 //findPos(positionElement)[1] - findPos(document.getElementById("schedule-events"))[1];

  		 if(eventArray[i].endDate){
             var topPoint = firstTime;                                                                                                                                                                            
             if(!eventArray[i].startDate){                                                                                                                                                                                                              
            	 topPoint = scheduleEventJQ.offset().top;                                                                                                                                                                                                   
             }
  			 dimensions['height'][currentPos] = (4 * 8 * (eventArray[i].durationTime) - 2) + (4 * (Math.ceil(top - firstTime + eventArray[i].durationTime) - .5 - Math.floor(top - firstTime)));
  	  		if(dimensions['height'][currentPos] > (bottomElement - dimensions['top'][currentPos] + topOffset)){                                                                                                                                                      
  	            dimensions['height'][currentPos] = bottomElement - dimensions['top'][currentPos] + topOffset;                                                                                                                                               
  	            dimensions['truncated'][currentPos] = true;                                                                                                                                                                                 
  	        } else {
  	        	dimensions['truncated'][currentPos] = false; 
  	        }
  		 } else {
  			 dimensions['height'][currentPos] = bottomElement - dimensions['top'][currentPos] + topOffset; 
  			 dimensions['truncated'][currentPos] = true;
  		 }

  		
        dimensions['width'][currentPos] = 160;
        dimensions['left'][currentPos] = 0;
        numItemsAdded++;
  	} else {
  		break;
  	}
  currentPos++;
  }}

  currentPos = 0;
  for (var i = 0; i < eventArray.length; i++) {
      if(!eventArray[i].allDay){

      //Check for an overlap
      var overlapCount = 1;
      if (!overlapBlock[i]) {
          overlapBlock[i] = i;
      }



      for (var j = i + 1; j < eventArray.length; j++) {
          if ((eventArray[i].startTime + eventArray[i].durationTime) > eventArray[j].startTime && overlapBlock[i] == i) {
              if (!overlapBlock[j]) {
                  overlapBlock[j] = i;
              }
              if (!overlapMember[j]) {
                  overlapMember[j] = j - i + 1;
              }
              overlapCount++;
              //                alert("inside" + ":" + i + ":" + j + ":" + Number(eventArray[i].startTime + eventArray[i].durationTime) + ":" + eventArray[j].startTime+":"+overlapBlock[j]);
          }
      }
      
      if (!overlapMember[i]) {
          overlapMember[i] = 1;
      }
      dimensions['overlap'][currentPos] = overlapCount;
      currentPos++;
  }}
  
  currentPos = 0;
  for (var i = 0; i < eventArray.length; i++) {
      if(!eventArray[i].allDay){
      var block = Number(overlapBlock[currentPos]);
      var bits = dimensions['overlap'][block];
      var member = Number(overlapMember[currentPos]);
      //        alert("i:" + i + ";block:" + block + ";bits:" + bits + ";member:" + member + ";b+b:" + Number(block + bits));
      if (block + bits == currentPos + 1) {
          dimensions['width'][currentPos] = 145 / (bits);
      } else if (member == 1 && bits == 2) {
          dimensions['width'][currentPos] = 100;
      } else {
          dimensions['width'][currentPos] = 145 / (bits - 1 );
      }
      dimensions['left'][currentPos] = (member - 1) * (145 / (bits));
      currentPos++;
      }
  }
  
  for (var i = 1; i < numItemsAdded; i++) {
      var temptimeblock = '';
      var styleClass = "calevent hasscheduleevent timeblock";
      if(dimensions['truncated'][i] && dimensions['toptruncated'][i]){
    	  styleClass += " truncated";
      } else if(dimensions['truncated'][i]){
    	  styleClass += " bottomtruncated";
      } else if(dimensions['toptruncated'][i]){
    	  styleClass += " toptruncated";
      }
      temptimeblock += '<dl class="' + styleClass + ' borderedgroup' + eventArray[i].styleTime + ' lightgroupbg' + eventArray[i].styleTime + '" style="';
      temptimeblock += 'top:' + dimensions['top'][i] + 'px;';
      temptimeblock += 'left:' + dimensions['left'][i] + 'px;';
      temptimeblock += 'width:' + dimensions['width'][i] + 'px;';
      temptimeblock += 'height:' + dimensions['height'][i] + 'px;">';
      temptimeblock += '<dt class="hasscheduleeventheading darkgroupbg' + eventArray[i].styleTime + '"><a href="#" onclick="selectEventById(' + eventArray[i].eventId + ');" class="schedule-header-link">' + eventArray[i].headerText + '</a></dt>';
      temptimeblock += '<dd><a href="#" onclick="selectEventById(' + eventArray[i].eventId + ');" class="schedule-link">' + eventArray[i].bodyText + '</a></dd>';
      
      temptimeblock += '</dl>';
      addtotimesched += temptimeblock;
  }
  addtotimesched += '</div>';
  if(timesched != null){
  	timesched.innerHTML += addtotimesched;
  }
}

function makeWait(ele){

}

function stopWait(ele){
	

}