/**
 * Toggles a collapsible box opened and closed, unless it's fixed.
 *
 *  @param elem The header element clicked on by the user.  
 */
function toggleCollapsibleBox(elem){
  var box=$(elem);
  if(!box.hasClassName("collapsiblebox")){
  	box=box.up(".collapsiblebox");
  }
  if(box.hasClassName("fixedbox")) {
    return false;
  }
  box.toggleClassName("closedbox");
  var textareas=box.select("textarea");
  textareas.each(function(ta){
  	matchTextareaHeightToContent(ta);
  });
}
function openCollapsibleBox(elem){
  var box=$(elem);
  if(!box.hasClassName("collapsiblebox")){
  	box=box.up(".collapsiblebox");
  }
  if(box.hasClassName("fixedbox")) {
    return false;
  }
  box.removeClassName("closedbox");	
}
function closeCollapsibleBox(elem){
  var box=$(elem);
  if(!box.hasClassName("collapsiblebox")){
  	box=box.up(".collapsiblebox");
  }
  if(box.hasClassName("fixedbox")) {
    return false;
  }
  box.addClassName("closedbox");	
}

function showContextMenu(img,menuItems) {
  Element.extend(img); //for IE
  Position.clone(img,$("contextmenu_real"),{setWidth:false,setHeight:false} );
  $("contextmenu_real").innerHTML="";
  $("contextmenu_real").style.display="block";
  for(i=0;i<menuItems.properties.length;i++){
    $("contextmenu_real").innerHTML+=writeContextMenuProperty(menuItems.properties[i]);
  }
  $("contextmenu_real").innerHTML+="<hr/>";
  for(i=0;i<menuItems.actions.length;i++){
    $("contextmenu_real").innerHTML+=writeContextMenuAction(menuItems.actions[i]);
  }
}

/**
 * Writes the context menu item.
 *
 * @param item A Javascript object containing the menu item info.
 */
function writeContextMenuProperty(item){
  var link="<span class=\"contextmenu_property\">"+item["property"]+":<\/span> "+item["val"]+"<br/>";
  return link;
}
/**
 * Writes the context menu item.
 *
 * @param item A Javascript object containing the menu item info.
 */
function writeContextMenuAction(item){

  var onclick="";
  if(item["onclick"]){ onclick='onclick="'+item["onclick"]+';return false"'; }
  var url = item["url"];
  if (0!=url.indexOf("http") && 0!=url.indexOf(contextPath)) {
  	url = contextPath+url;
  }
  var link ='<a href="'+ url +'" '+onclick+'>';
  link += '<img src="'+ contextPath +'/skins/default/images/icons/'+ item["icon"] +'" alt="" height="16" width="16">';
  link += item["text"];
  link += '</a>';

  return link;
}

/**
 * Hides the context menu - should be called on mouseout of the menu.
 *
 */
function hideContextMenu() {
  $("contextmenu_real").style.display="none";
}

/* For in-page calendar widget 
 * (pimsWidget:calendar, not the JS pop-up one) 
 * Functions to jump 1 month/year forward/back
 */
function calendarLastMonth(calendarId){
  var cal=document.getElementById(calendarId);
  cal.currentDate.setMonth(cal.currentDate.getMonth()-1);
  replaceCalendar(calendarId);
}
function calendarNextMonth(calendarId){
  var cal=document.getElementById(calendarId);
  cal.currentDate.setMonth(cal.currentDate.getMonth()+1);
  replaceCalendar(calendarId);
}
function calendarLastYear(calendarId){
  var cal=document.getElementById(calendarId);
  cal.currentDate.setYear(cal.currentDate.getFullYear()-1);
  replaceCalendar(calendarId);
}
function calendarNextYear(calendarId){
  var cal=document.getElementById(calendarId);
  cal.currentDate.setYear(cal.currentDate.getFullYear()+1);
  replaceCalendar(calendarId);
}
function replaceCalendar(widgetId){
	var widget=document.getElementById(widgetId);
	var newDate=widget.currentDate;
	widget.innerHTML=makeCalendarHTML(widgetId,newDate);
}