/*
   name - name of the cookie
   value - value of the cookie
   [expires] - expiration date of the cookie
     (defaults to end of current session)
   [path] - path for which the cookie is valid
     (defaults to path of calling document)
   [domain] - domain for which the cookie is valid
     (defaults to domain of calling document)
   [secure] - Boolean value indicating if the cookie transmission requires
     a secure transmission
   * an argument defaults when it is assigned null as a placeholder
   * a null placeholder is not required for trailing omitted arguments
*/

function setCookie(name, value, expires, path, domain, secure) {
  var curCookie = name + "=" + escape(value) +
      ((expires) ? "; expires=" + expires.toGMTString() : "") +
      ((path) ? "; path=" + path : "") +
      ((domain) ? "; domain=" + domain : "") +
      ((secure) ? "; secure" : "");
  document.cookie = curCookie;
}


/*
  name - name of the desired cookie
  return string containing value of specified cookie or null
  if cookie does not exist
*/

function getCookie(name) {
  var dc = document.cookie;
  var prefix = name + "=";
  var begin = dc.indexOf("; " + prefix);
  if (begin == -1) {
    begin = dc.indexOf(prefix);
    if (begin != 0) return null;
  } else
    begin += 2;
  var end = document.cookie.indexOf(";", begin);
  if (end == -1)
    end = dc.length;
  return unescape(dc.substring(begin + prefix.length, end));
}


/*
   name - name of the cookie
   [path] - path of the cookie (must be same as path used to create cookie)
   [domain] - domain of the cookie (must be same as domain used to
     create cookie)
   path and domain default if assigned null or omitted if no explicit
     argument proceeds
*/

function deleteCookie(name, path, domain) {
  if (getCookie(name)) {
    document.cookie = name + "=" +
    ((path) ? "; path=" + path : "") +
    ((domain) ? "; domain=" + domain : "") +
    "; expires=Thu, 01-Jan-70 00:00:01 GMT";
  }
}

// date - any instance of the Date object
// * hand all instances of the Date object to this function for "repairs"
function fixDate(date) {
  var base = new Date(0);
  var skew = base.getTime();
  if (skew > 0)
    date.setTime(date.getTime() - skew);
}


/*-------------------------------Common-----------------------------------------------------------------*/
function changeSheets(whichSheet){
var expDate = new Date("October 12, 2100");
skincookie=getCookie("mailingsskin");	  
setCookie("mailingsskin", whichSheet, expDate, "/", "", "");
var styles = document.getElementsByTagName("link");
for ( i=0; styles && i < styles.length; i++)
{	
if ((styles[i].rel.toLowerCase().indexOf("stylesheet") != -1) && styles[i].title){
			styles[i].disabled = true ;	
			if(styles[i].title.toLowerCase()==whichSheet.toLowerCase()){			
				styles[i].disabled = false ;
			}
	}
}
}
function showMenu(saveInCookie){
    menuSplitPane.expand();
    if (saveInCookie) {
        var expDate = new Date("October 12, 2100");
        showMenucookie = getCookie("showMenu");
        setCookie("showMenu", "true," + menuSplitPane.getWidthPercent(menuSplitPane.div1), expDate, "/", "", "");
    }
}
function hideMenu(saveInCookie){
	if(saveInCookie){
		var expDate = new Date("October 12, 2100");
		showMenucookie=getCookie("showMenu");
		setCookie("showMenu", "false," + menuSplitPane.getWidthPercent(menuSplitPane.div1), expDate, "/", "", "");
	}
	menuSplitPane.collapse();
}
function toggleMenu(){
    menuSplitPane.toggle();
}
function menuSplitStart(splitPane, ev) {
    if ($('monthlyMessagesChartDiv')) {
        $('monthlyMessagesChartDiv').style.width = '0px';
        
    }
    if ($('monthlyChartDiv')) {        
        $('monthlyChartDiv').style.width = '0px';
    }
}
function menuSplitEnd(splitPane, ev) {
    var expDate = new Date("October 12, 2100");
    showMenucookie = getCookie("showMenu");
    if (splitPane.isCollapsed) {
        setCookie("showMenu", "false," + splitPane.savedLeftWidthPercent, expDate, "/", "", "");
    } else {
        setCookie("showMenu", "true," + splitPane.getWidthPercent(splitPane.div1), expDate, "/", "", "");
    }
    if ($('monthlyMessagesChartDiv')) {
        $('monthlyMessagesChartDiv').style.width = (splitPane.getWidth(splitPane.div2)-15)+'px';                
    }
    if ($('monthlyChartDiv')) {
        $('monthlyChartDiv').style.width =(splitPane.getWidth(splitPane.div2)-15) + 'px';                
    }
}

function toggleSubmenu(clickedElement){
		var parentLi = $(clickedElement).ancestors()[0];		
		while(parentLi.tagName.toLowerCase()!="li"){
			parentLi = parentLi.ancestors()[0];		
		}		
		parentLi.toggleClassName('expanded');
		parentLi.toggleClassName('collapsed');
		$(clickedElement).toggleClassName('ico-openBtn');
		$(clickedElement).toggleClassName('ico-closeBtn');
		menuSplitPane.setDividerHeight();
		saveMenu();
}

function restoreMenu() {
    menucookie = getCookie("menuState");
    if(menucookie!=null && menucookie!="null" && menucookie!=""){
        var expandedIds = menucookie.split(';');
        var li;
        var livalue;
        expandedIds.each(function(liIdValue, index) {
            if (liIdValue.split('=').length > 1) {
                li = $(liIdValue.split('=')[0]);
                livalue = liIdValue.split('=')[1];
                if (li && ((li.hasClassName('collapsed') && livalue == "1") || (li.hasClassName('expanded') && livalue == "0"))) {
                    li.toggleClassName('expanded');
                    li.toggleClassName('collapsed');
                    $$("#" + li.id + ">.menuico").each(function(icon, iconIndex) {
                        icon.toggleClassName('ico-openBtn');
                        icon.toggleClassName('ico-closeBtn');
                    });
                }
               
            }
        });
    }
}

function saveMenu() {
    var result = '';
    var menu = $$("#menu li");
    menu.each(function(li, index) {
        if (li.hasClassName('expanded')) {
            result+=li.id+"=1;"
        }
        if (li.hasClassName('collapsed')) {
            result += li.id + "=0;"
        }
    });
    //save cookie
    var expDate = new Date("October 12, 2100");
    menucookie = getCookie("menuState");
    setCookie("menuState", result, expDate, "/", "", "");
}



/*  Copyright Mihai Bazon, 2002, 2003  |  http://dynarch.com/mishoo/
 * ---------------------------------------------------------------------------
 *
 * The DHTML Calendar
 *
 * Details and latest version at:
 * http://dynarch.com/mishoo/calendar.epl
 *
 * This script is distributed under the GNU Lesser General Public License.
 * Read the entire license text here: http://www.gnu.org/licenses/lgpl.html
 *
 * This file defines helper functions for setting up the calendar.  They are
 * intended to help non-programmers get a working calendar on their site
 * quickly.  This script should not be seen as part of the calendar.  It just
 * shows you what one can do with the calendar, while in the same time
 * providing a quick and simple method for setting it up.  If you need
 * exhaustive customization of the calendar creation process feel free to
 * modify this code to suit your needs (this is recommended and much better
 * than modifying calendar.js itself).
 */

// $Id$

/**
 *  This function "patches" an input field (or other element) to use a calendar
 *  widget for date selection.
 *
 *  The "params" is a single object that can have the following properties:
 *
 *    prop. name   | description
 *  -------------------------------------------------------------------------------------------------
 *   inputField    | the ID of an input field to store the date
 *   displayArea   | the ID of a DIV or other element to show the date
 *   button        | ID of a button or other element that will trigger the calendar
 *   eventName     | event that will trigger the calendar, without the "on" prefix (default: "click")
 *   ifFormat      | date format that will be stored in the input field
 *   daFormat      | the date format that will be used to display the date in displayArea
 *   singleClick   | (true/false) wether the calendar is in single click mode or not (default: true)
 *   firstDay      | numeric: 0 to 6.  "0" means display Sunday first, "1" means display Monday first, etc.
 *   align         | alignment (default: "Br"); if you don't know what's this see the calendar documentation
 *   range         | array with 2 elements.  Default: [1900, 2999] -- the range of years available
 *   weekNumbers   | (true/false) if it's true (default) the calendar will display week numbers
 *   flat          | null or element ID; if not null the calendar will be a flat calendar having the parent with the given ID
 *   flatCallback  | function that receives a JS Date object and returns an URL to point the browser to (for flat calendar)
 *   disableFunc   | function that receives a JS Date object and should return true if that date has to be disabled in the calendar
 *   onSelect      | function that gets called when a date is selected.  You don't _have_ to supply this (the default is generally okay)
 *   onClose       | function that gets called when the calendar is closed.  [default]
 *   onUpdate      | function that gets called after the date is updated in the input field.  Receives a reference to the calendar.
 *   date          | the date that the calendar will be initially displayed to
 *   showsTime     | default: false; if true the calendar will include a time selector
 *   timeFormat    | the time format; can be "12" or "24", default is "12"
 *   electric      | if true (default) then given fields/date areas are updated for each move; otherwise they're updated only on close
 *   step          | configures the step of the years in drop-down boxes; default: 2
 *   position      | configures the calendar absolute position; default: null
 *   cache         | if "true" (but default: "false") it will reuse the same calendar object, where possible
 *   showOthers    | if "true" (but default: "false") it will show days from other months too
 *
 *  None of them is required, they all have default values.  However, if you
 *  pass none of "inputField", "displayArea" or "button" you'll get a warning
 *  saying "nothing to setup".
 */
Calendar.setup = function (params) {
	function param_default(pname, def) { if (typeof params[pname] == "undefined") { params[pname] = def; } };

	param_default("inputField",     null);
	param_default("displayArea",    null);
	param_default("button",         null);
	param_default("eventName",      "click");
	param_default("ifFormat",       "%Y/%m/%d");
	param_default("daFormat",       "%Y/%m/%d");
	param_default("singleClick",    true);
	param_default("disableFunc",    null);
	param_default("dateStatusFunc", params["disableFunc"]);	// takes precedence if both are defined
	param_default("dateText",       null);
	param_default("firstDay",       null);
	param_default("align",          "Br");
	param_default("range",          [1900, 2999]);
	param_default("weekNumbers",    true);
	param_default("flat",           null);
	param_default("flatCallback",   null);
	param_default("onSelect",       null);
	param_default("onClose",        null);
	param_default("onUpdate",       null);
	param_default("date",           null);
	param_default("showsTime",      false);
	param_default("timeFormat",     "24");
	param_default("electric",       true);
	param_default("step",           2);
	param_default("position",       null);
	param_default("cache",          false);
	param_default("showOthers",     false);
	param_default("multiple",       null);

	var tmp = ["inputField", "displayArea", "button"];
	for (var i in tmp) {
		if (typeof params[tmp[i]] == "string") {
			params[tmp[i]] = document.getElementById(params[tmp[i]]);
		}
	}
	if (!(params.flat || params.multiple || params.inputField || params.displayArea || params.button)) {
		alert("Calendar.setup:\n  Nothing to setup (no fields found).  Please check your code");
		return false;
	}

	function onSelect(cal) {
		var p = cal.params;
		var update = (cal.dateClicked || p.electric);
		if (update && p.inputField) {
			p.inputField.value = cal.date.print(p.ifFormat);
			if (typeof p.inputField.onchange == "function")
				p.inputField.onchange();
		}
		if (update && p.displayArea)
			p.displayArea.innerHTML = cal.date.print(p.daFormat);
		if (update && typeof p.onUpdate == "function")
			p.onUpdate(cal);
		if (update && p.flat) {
			if (typeof p.flatCallback == "function")
				p.flatCallback(cal);
		}
		if (update && p.singleClick && cal.dateClicked)
			cal.callCloseHandler();
	};

	if (params.flat != null) {
		if (typeof params.flat == "string")
			params.flat = document.getElementById(params.flat);
		if (!params.flat) {
			alert("Calendar.setup:\n  Flat specified but can't find parent.");
			return false;
		}
		var cal = new Calendar(params.firstDay, params.date, params.onSelect || onSelect);
		cal.showsOtherMonths = params.showOthers;
		cal.showsTime = params.showsTime;
		cal.time24 = (params.timeFormat == "24");
		cal.params = params;
		cal.weekNumbers = params.weekNumbers;
		cal.setRange(params.range[0], params.range[1]);
		cal.setDateStatusHandler(params.dateStatusFunc);
		cal.getDateText = params.dateText;
		if (params.ifFormat) {
			cal.setDateFormat(params.ifFormat);
		}
		if (params.inputField && typeof params.inputField.value == "string") {
			cal.parseDate(params.inputField.value);
		}
		cal.create(params.flat);
		cal.show();
		return false;
	}

	var triggerEl = params.button || params.displayArea || params.inputField;
	triggerEl["on" + params.eventName] = function() {
		var dateEl = params.inputField || params.displayArea;
		var dateFmt = params.inputField ? params.ifFormat : params.daFormat;
		var mustCreate = false;
		var cal = window.calendar;
		if (dateEl)
			params.date = Date.parseDate(dateEl.value || dateEl.innerHTML, dateFmt);
		if (!(cal && params.cache)) {
			window.calendar = cal = new Calendar(params.firstDay,
							     params.date,
							     params.onSelect || onSelect,
							     params.onClose || function(cal) { cal.hide(); });
			cal.showsTime = params.showsTime;
			cal.time24 = (params.timeFormat == "24");
			cal.weekNumbers = params.weekNumbers;
			mustCreate = true;
		} else {
			if (params.date)
				cal.setDate(params.date);
			cal.hide();
		}
		if (params.multiple) {
			cal.multiple = {};
			for (var i = params.multiple.length; --i >= 0;) {
				var d = params.multiple[i];
				var ds = d.print("%Y%m%d");
				cal.multiple[ds] = d;
			}
		}
		cal.showsOtherMonths = params.showOthers;
		cal.yearStep = params.step;
		cal.setRange(params.range[0], params.range[1]);
		cal.params = params;
		cal.setDateStatusHandler(params.dateStatusFunc);
		cal.getDateText = params.dateText;
		cal.setDateFormat(dateFmt);
		if (mustCreate)
			cal.create();
		cal.refresh();
		if (!params.position)
			cal.showAtElement(params.button || params.displayArea || params.inputField, params.align);
		else
			cal.showAt(params.position[0], params.position[1]);
		return false;
	};

	return cal;
};

/*----------------------------------------------- show box----------------------------------*/
function showBox(e,boxId, position){
//position:
//default
// 1 2 3
// 4 - 5
// 6 7 8
//9 - automaticaly top or bottom depending on screen witdh/height
//10- automaticaly left or right depending on screen witdh/height
//11- automaticaly top or bottom starting at the center of clicked object.
//12- automaticaly near the mouse pointer.
//default is y - auto; x under mouse
if (!e) var e = window.event;
 var box = $(boxId);
	if(box.style.display=='none'){			
			var clickedObj= e.srcElement;
			if(!e.srcElement){
				var clickedObj = e.target;
				while(clickedObj.nodeType != clickedObj.ELEMENT_NODE){
					clickedObj = clickedObj.parentNode;
				}
			}			
			var baseClickedObj = clickedObj;  
						
			var zPos=0;
			var yPos=clickedObj.offsetTop+clickedObj.offsetHeight;
			var xPos=clickedObj.offsetLeft+clickedObj.offsetWidth;
			while(clickedObj.offsetParent!=null){
				clickedObj=clickedObj.offsetParent;
				yPos+=clickedObj.offsetTop;
				xPos+=clickedObj.offsetLeft;
				if(clickedObj.style.zIndex!='' && clickedObj.style.zIndex>zPos){
					zPos=clickedObj.style.zIndex+1;
				}
			}			
			box.style.display="block";										
			if(position==1){
				xPos=xPos-box.offsetWidth - baseClickedObj.offsetWidth;
				yPos=yPos-box.offsetHeight - baseClickedObj.offsetHeight;				
			}else if(position==2){
				xPos-=baseClickedObj.offsetWidth;
				yPos=yPos-box.offsetHeight - baseClickedObj.offsetHeight;				
			}else if(position==3){
				yPos=yPos-box.offsetHeight - baseClickedObj.offsetHeight;	
			}else if(position==4){
				xPos=xPos-box.offsetWidth - baseClickedObj.offsetWidth;
				yPos=yPos - baseClickedObj.offsetHeight;	
			}else if(position ==5){				
				yPos=yPos - baseClickedObj.offsetHeight;	
			}else if(position ==6){
				xPos=xPos-box.offsetWidth - baseClickedObj.offsetWidth;				
			}else if(position ==7){
				xPos=xPos- baseClickedObj.offsetWidth;				
			}else if(position ==8){
				//default	posx posy	
			}else if(position ==9){				
				if(yPos+box.offsetHeight>TotalHeightOfThePage()){
					yPos=yPos-box.offsetHeight - baseClickedObj.offsetHeight;			
				}								
				xPos=xPos-baseClickedObj.offsetWidth;								
			}else if(position ==10){				
				yPos-=baseClickedObj.offsetHeight;						
				if(xPos+box.offsetWidth>TotalWidthOfThePage()){
					xPos=(xClickCoordinate(e)-box.offsetWidth) - baseClickedObj.offsetWidth;				
				}
			}else if(position ==11){							
				if(yPos+box.offsetHeight>TotalHeightOfThePage()){
					yPos=yPos-box.offsetHeight - baseClickedObj.offsetHeight;			
				}	
				xPos=xPos - baseClickedObj.offsetWidth/2;
			}else if(position ==12){
				yPos-=baseClickedObj.offsetHeight;					
			}
			else{
				if(yClickCoordinate(e)+box.offsetHeight>TotalHeightOfThePage()){			
					yPos-=box.offsetHeight;
				} else {
					yPos-=10;
				}
				if(xClickCoordinate(e)+box.offsetWidth>TotalWidthOfThePage()){
					xPos=xClickCoordinate(e)-box.offsetWidth - baseClickedObj.offsetWidth;				
				} else {
					xPos=xClickCoordinate(e);			   
				}
			}							
			box.style.top=yPos+"px";
			box.style.left=xPos+"px";						
			box.style.zIndex=zPos;
 } 
}

function makeVisible(boxId){
	var box =$(boxId);
	box.style.display='block'
}
function hideBox(boxId){
 var box = $(boxId);
 box.style.display='none';
}
function TotalHeightOfThePage(){
	var totalHeightOfThePage;
	var test1 = document.body.scrollHeight;
	var test2 = document.body.offsetHeight;
	if (test1 > test2) // all but Explorer Mac
	{
		totalHeightOfThePage = document.body.scrollHeight;
	}
	else // Explorer Mac; would also work in Explorer 6 Strict, Mozilla and Safari
	{
		totalHeightOfThePage = document.body.offsetHeight;
	}
	return totalHeightOfThePage;
}

function TotalWidthOfThePage(){
	var totalWidthOfThePage;
	var test1 = document.body.scrollWidth;
	var test2 = document.body.offsetWidth;
	if (test1 > test2)
	{
		totalWidthOfThePage = document.body.scrollWidth;
	}
	else 
	{
		totalWidthOfThePage = document.body.offsetWidth;
	}
	return totalWidthOfThePage;
}
function yClickCoordinate(e){
	var posy = 0;
	if (!e) var e = window.event;
	if (e.pageX || e.pageY)
	{	
		posy = e.pageY;
	}
	else if (e.clientX || e.clientY)
	{
		if (document.documentElement && !document.documentElement.scrollTop){
			posy = e.clientY;
		}
		// IE6 +4.01 but no scrolling going on
		else if (document.documentElement && document.documentElement.scrollTop){
			posy = e.clientY + document.documentElement.scrollTop;
		}
		// IE6 +4.01 and user has scrolled
		else if (document.body && document.body.scrollTop){
			posy = e.clientY + document.body.scrollHeight;
		}
		//alert(document.body.scrollHeight);
		
	}
	return posy;
}

function xClickCoordinate(e){
	var posx = 0;
	if (!e) var e = window.event;
	if (e.pageX || e.pageY)
	{	
		posx = e.pageX;
	}
	else if (e.clientX || e.clientY)
	{
		if (document.documentElement && !document.documentElement.scrollLeft){
			posx = e.clientX;
		}		
		else if (document.documentElement && document.documentElement.scrollLeft){
			posx = e.clientX + document.documentElement.scrollLeft;
		}		
		else if (document.body && document.body.scrollTop){
			posx = e.clientX + document.body.scrollWidth;
		}	
	}
	return posx;
}


/************************************************************************************************************
Original script by Stefan Born(http://home.arcor.de/xbo/title-to-note/)
optimized and redesignd by convincingmail.com
************************************************************************************************************/
var titleToNote = {
 // Define which elements should be affected:
 elements : ['a', 'img', 'span'],
 setup : function(){
 if(!document.getElementById || !document.createElement) return;
   // create note
   var div = document.createElement("div");
   div.setAttribute("id", "titleAsNote");
   $$("body")[0].appendChild(div);
   $("titleAsNote").style.display = "none";
   div.onmouseout = titleToNote.hideNote;
   // attach events
   for(j=0;j<titleToNote.elements.length;j++){
     for(i=0;i<$$(titleToNote.elements[j]).length;i++){
       var el = $$(titleToNote.elements[j])[i];
       if(el.getAttribute("title") && el.getAttribute("title") != "" &&  !el.hasClassName('textButton')){
         el.onmouseover = titleToNote.showNote;
         el.onmouseout = titleToNote.hideNote;
       }
     }
   }
 },
 showNote : function(e)
 {
	 $("titleAsNote").update(this.getAttribute("title"));
   this.setAttribute("title", "");
   if(this.style.position=='absolute'){
		showBox(e,"titleAsNote",10); 
	 }else{
		showBox(e,"titleAsNote", 10); 
	 }
 },
 hideNote : function(e)
 {
   this.setAttribute("title", $("titleAsNote").innerHTML);
   $("titleAsNote").update("");
   $("titleAsNote").hide();
 }
}
 /* End Title To Note */	
