function MM_findObj(n, d) { //v4.01
  var p,i,x;  if(!d) d=document; if((p=n.indexOf("?"))>0&&parent.frames.length) {
    d=parent.frames[n.substring(p+1)].document; n=n.substring(0,p);}
  if(!(x=d[n])&&d.all) x=d.all[n]; for (i=0;!x&&i<d.forms.length;i++) x=d.forms[i][n];
  for(i=0;!x&&d.layers&&i<d.layers.length;i++) x=MM_findObj(n,d.layers[i].document);
  if(!x && d.getElementById) x=d.getElementById(n); return x;
}
function MM_swapImage() { //v3.0
  var i,j=0,x,a=MM_swapImage.arguments; document.MM_sr=new Array; for(i=0;i<(a.length-2);i+=3)
   if ((x=MM_findObj(a[i]))!=null){document.MM_sr[j++]=x; if(!x.oSrc) x.oSrc=x.src; x.src=a[i+2];}
}
function MM_swapImgRestore() { //v3.0
  var i,x,a=document.MM_sr; for(i=0;a&&i<a.length&&(x=a[i])&&x.oSrc;i++) x.src=x.oSrc;
}

function MM_preloadImages() { //v3.0
 var d=document; if(d.images){ if(!d.MM_p) d.MM_p=new Array();
   var i,j=d.MM_p.length,a=MM_preloadImages.arguments; for(i=0; i<a.length; i++)
   if (a[i].indexOf("#")!=0){ d.MM_p[j]=new Image; d.MM_p[j++].src=a[i];}}
}

var lastDIV = '\0';
var lastMouseOver = '\0';
var lastToggledBG = null;
var lastToggledBGimage = null;
var lastToggledBGcolor = null;

function moreFields() {
	args=moreFields.arguments;
    i=1;
    while (document.getElementById(args[0]+i) != null)
      i++;
	var newFields = document.getElementById(args[0]).cloneNode(true);
	newFields.id = args[0]+i;
	newFields.style.display = 'block';
	var newField = newFields.childNodes;
	for (var j=0;j<newField.length;j++) {
		var theName = newField[j].name
		if (theName)
			newField[j].name = theName + i;
	}
	var insertHere = document.getElementById(args[1]);
	insertHere.parentNode.insertBefore(newFields,insertHere);
    
}

function removeField(element,parentElement) {
 args=removeField.arguments;
 parentElement.removeChild(element);
}

function checkUnique(dataForm,totalItems,itemName) {
  
  i=1;
  while (i <= totalItems) {
    currentName = 'item'+i;
    if (itemName != currentName) {
      item=document.getElementsByName(currentName)[0];
      item.checked == 'false'; 
    }
    i++;
  }
}

function calculateTaskHours(form) {
  i=1;
  var totalTaskHours=0;
  currentTask='taskhours'+i;
  while (form.elements[currentTask] != null) {
    totalTaskHours+=parseInt(form.elements[currentTask].value);
    i++;
    currentTask='taskhours'+i;
  }  
  form.totalTaskHours.value=totalTaskHours;
}

function swapDIV(d) {
    if (lastDIV == '\0')
	  displayDIV(d);
	else {
	  hideDIV(lastDIV);
	  displayDIV(d);
	}
    lastDIV=d;
}

function toggleDIV(d) {
  if (document.getElementById(d).style.display == 'none')
    displayDIV(d);
  else
    hideDIV(d);
}

function hideDIV(d) { 
  document.getElementById(d).style.display = "none"; 
}

function displayDIV(d) { 
  document.getElementById(d).style.display = "block"; 
}

function singleToggleBackground(d,bg) {

  if (lastToggledBG != null) {
    lastToggledBG.style.background=lastToggledBGimage;
    lastToggledBG.style.color=lastToggledBGcolor;
  }
  lastToggledBGimage=d.style.background;
  lastToggledBGcolor=d.style.color;
  lastToggledBG=d;    
  d.style.background=bg;
  d.style.color="#FFF";
}

function toggleBackground(d,bg) {
  
  if (d.style.oldBackground == null) {
    d.style.oldBackground=d.style.background;
    d.style.oldColor=d.style.color;
    d.style.background=bg;
    d.style.color="#FFF";
  }
  else {
    d.style.background=d.style.oldBackground;
    d.style.color=d.style.oldColor;
    d.style.oldBackground=null;
  }
  lastToggledBG=d;
}

function swapBackground(d,bg) {
  
  lastMouseOver=d.style.background;
  d.style.background=bg;
  d.style.color="#FFF";
  
}

function revertBackground(d) {
  d.style.background=lastMouseOver;	
}

function updateFormValue(form,name,result) {
  form.elements[name].value=result;
}


function clickClear(thisfield, defaulttext) {
  if (thisfield.value == defaulttext) {
    thisfield.value = "";
  }
}

function clickRecall(thisfield, defaulttext) {
  if (thisfield.value == "") {
    thisfield.value = defaulttext;
  }
}


/*
 * Clear Default Text: functions for clearing and replacing default text in
 * <input> elements.
 *
 * by Ross Shannon, http://www.yourhtmlsource.com/
 */
/* 
 * Cross-browser event handling, by Scott Andrew
 */
function addEvent(element, eventType, lamdaFunction, useCapture) {
    if (element.addEventListener) {
        element.addEventListener(eventType, lamdaFunction, useCapture);
        return true;
    } else if (element.attachEvent) {
        var r = element.attachEvent('on' + eventType, lamdaFunction);
        return r;
    } else {
        return false;
    }
}

/* 
 * Kills an event's propagation and default action
 */
function knackerEvent(eventObject) {
    if (eventObject && eventObject.stopPropagation) {
        eventObject.stopPropagation();
    }
    if (window.event && window.event.cancelBubble ) {
        window.event.cancelBubble = true;
    }
    
    if (eventObject && eventObject.preventDefault) {
        eventObject.preventDefault();
    }
    if (window.event) {
        window.event.returnValue = false;
    }
}

/* 
 * Safari doesn't support canceling events in the standard way, so we must
 * hard-code a return of false for it to work.
 */
function cancelEventSafari() {
    return false;        
}

/* 
 * Cross-browser style extraction, from the JavaScript & DHTML Cookbook
 * <http://www.oreillynet.com/pub/a/javascript/excerpt/JSDHTMLCkbk_chap5/index5.html>
 */
function getElementStyle(elementID, CssStyleProperty) {
    var element = document.getElementById(elementID);
    if (element.currentStyle) {
        return element.currentStyle[toCamelCase(CssStyleProperty)];
    } else if (window.getComputedStyle) {
        var compStyle = window.getComputedStyle(element, '');
        return compStyle.getPropertyValue(CssStyleProperty);
    } else {
        return '';
    }
}

/* 
 * CamelCases CSS property names. Useful in conjunction with 'getElementStyle()'
 * From <http://dhtmlkitchen.com/learn/js/setstyle/index4.jsp>
 */
function toCamelCase(CssProperty) {
    var stringArray = CssProperty.toLowerCase().split('-');
    if (stringArray.length == 1) {
        return stringArray[0];
    }
    var ret = (CssProperty.indexOf("-") == 0)
              ? stringArray[0].charAt(0).toUpperCase() + stringArray[0].substring(1)
              : stringArray[0];
    for (var i = 1; i < stringArray.length; i++) {
        var s = stringArray[i];
        ret += s.charAt(0).toUpperCase() + s.substring(1);
    }
    return ret;
}

/*
 * Disables all 'test' links, that point to the href '#', by Ross Shannon
 */
function disableTestLinks() {
  var pageLinks = document.getElementsByTagName('a');
  for (var i=0; i<pageLinks.length; i++) {
    if (pageLinks[i].href.match(/[^#]#$/)) {
      addEvent(pageLinks[i], 'click', knackerEvent, false);
    }
  }
}

/* 
 * Cookie functions
 */
function createCookie(name, value, days) {
    var expires = '';
    if (days) {
        var date = new Date();
        date.setTime(date.getTime() + (days*24*60*60*1000));
        var expires = '; expires=' + date.toGMTString();
    }
    document.cookie = name + '=' + value + expires + '; path=/';
}

function readCookie(name) {
    var cookieCrumbs = document.cookie.split(';');
    var nameToFind = name + '=';
    for (var i = 0; i < cookieCrumbs.length; i++) {
        var crumb = cookieCrumbs[i];
        while (crumb.charAt(0) == ' ') {
            crumb = crumb.substring(1, crumb.length); /* delete spaces */
        }
        if (crumb.indexOf(nameToFind) == 0) {
            return crumb.substring(nameToFind.length, crumb.length);
        }
    }
    return null;
}

function eraseCookie(name) {
    createCookie(name, '', -1);
}

addEvent(window, 'load', init, false);

function init() {
    var formInputs = document.getElementsByTagName('input');
    for (var i = 0; i < formInputs.length; i++) {
        var theInput = formInputs[i];
        
        if (theInput.type == 'text' && theInput.className.match(/\bcleardefault\b/)) {  
            /* Add event handlers */          
            addEvent(theInput, 'focus', clearDefaultText, false);
            addEvent(theInput, 'blur', replaceDefaultText, false);
            
            /* Save the current value */
            if (theInput.value != '') {
                theInput.defaultText = theInput.value;
            }
        }
    }
}

function clearDefaultText(e) {
    var target = window.event ? window.event.srcElement : e ? e.target : null;
    if (!target) return;
    
    if (target.value == target.defaultText) {
        target.value = '';
    }
}

function replaceDefaultText(e) {
    var target = window.event ? window.event.srcElement : e ? e.target : null;
    if (!target) return;
    
    if (target.value == '' && target.defaultText) {
        target.value = target.defaultText;
    }
}
