function get_element(){
	var elements=new Array();
	for(var i=0;i<arguments.length;i++){
		var element=arguments[i];
		if(typeof element=='string')
			element=document.getElementById(element);
		if(arguments.length==1) 
			return element;
		elements.push(element);
	}
	return elements;
}

function hide () {for (i = 0; i < arguments.length; i++) {var css_element = get_element(arguments[i]); if (css_element) css_element.style.display = "none";}}
function show () {for (i = 0; i < arguments.length; i++) {var css_element = get_element(arguments[i]); if (css_element) css_element.style.display = "";}}
function toggle () {for (i = 0; i < arguments.length; i++) {var css_element = get_element(arguments[i]); if (css_element) {
	css_element.style.display = (css_element.style.display) ? "":"none";
	}
}
}

//useful function for swapping the names of two elements.
// used where there are alternatives for form elements, and one cannot
// be allowed to contaminate the post request
function swap_name (a, b) {
	namea=document.getElementById(a).name;
	nameb=document.getElementById(b).name;
	document.getElementById(a).setAttribute('name', nameb);	
	document.getElementById(b).setAttribute('name', namea);	
}

function clearOnce (input, initial_state) {
		var css_element = get_element(input); 
		if (css_element.value==initial_state) css_element.value = "";
}

function expand () {
	for (i = 0; i < arguments.length; i++) {
		var css_element = get_element(arguments[i]); 
		if (css_element) {
			css_element.style.display = (css_element.style.display) ? "":"none";
			var plus=get_element("plus_"+arguments[i]);
			//alert(arguments[i]);
			if (plus) plus.style.display = (plus.style.display) ? "":"none";
			var minus=get_element("minus_"+arguments[i]);
			if (minus) minus.style.display = (minus.style.display) ? "":"none";
		}
	}
}

// From http://www.snook.ca/archives/javascript/your_favourite_1/
function getElementsByClass(node, classname) { 
var a = []; 
	var re = new RegExp('\\b' + classname + '\\b'); 
	var els = node.getElementsByTagName("*"); 
	for(var i=0,j=els.length; i<j; i++) 
			if(re.test(els[i].className))a.push(els[i]); return a; 
}

function toggle_all () {
	var container='task';
	element=document.getElementById(container);
	//alert(arguments.length);
	if (!arguments.length) {
		var rows= getElementsByClass(element, 'task');
		for (i = 0; i < rows.length; i++) {
			var css_element =rows[i];
			css_element.style.display = (css_element.style.display) ? "":"none";
		} 
		var rows= getElementsByClass(element, 'minus');
		for (i = 0; i < rows.length; i++) {
			var css_element =rows[i];
			css_element.style.display = (css_element.style.display) ? "":"none";
		} 
		var rows= getElementsByClass(element, 'plus');
		for (i = 0; i < rows.length; i++) {
			var css_element =rows[i];
			css_element.style.display = (css_element.style.display) ? "":"none";
		} 
} else {
		for (j = 0; j < arguments.length; j++) {
			var rows= getElementsByClass(element, arguments[j]);
			for (i = 0; i < rows.length; i++) {
				var css_element =rows[i];
				css_element.style.display = (css_element.style.display) ? "":"none";
			} 
			//alert(arguments[j]);
			var plus=get_element("plus_"+arguments[j]);
			if (plus) plus.style.display = (plus.style.display) ? "":"none";
			var minus=get_element("minus_"+arguments[j]);
			if (minus) minus.style.display = (minus.style.display) ? "":"none";
		}
	}
}

function expand_all () {
	var container='task';
	element=document.getElementById(container);
	//alert(arguments.length);
	if (!arguments.length) {
		var rows= getElementsByClass(element, 'task');
		for (i = 0; i < rows.length; i++) {
			var css_element =rows[i];
			css_element.style.display =  "";
		} 
		var rows= getElementsByClass(element, 'minus');
		for (i = 0; i < rows.length; i++) {
			var css_element =rows[i];
			css_element.style.display =  "";
		} 
		var rows= getElementsByClass(element, 'plus');
		for (i = 0; i < rows.length; i++) {
			var css_element =rows[i];
			css_element.style.display = "none";
		} 
	} else {
		for (j = 0; j < arguments.length; j++) {
			var rows= getElementsByClass(element, arguments[j]+"_child");
			for (i = 0; i < rows.length; i++) {
				var css_element =rows[i];
				css_element.style.display = "";
			} 
			//alert(arguments[j]);
			var plus=get_element("plus_"+arguments[j]);
			if (plus) plus.style.display = "none";
			var minus=get_element("minus_"+arguments[j]);
			if (minus) minus.style.display = "";
		}
	}
}

function collapse_all () {
	var container='task';
	element=document.getElementById(container);
	//alert(arguments.length);
	if (!arguments.length) {
		var rows= getElementsByClass(element, 'task');
		for (i = 0; i < rows.length; i++) {
			var css_element =rows[i];
			css_element.style.display =  "none";
		} 
		var rows= getElementsByClass(element, 'minus');
		for (i = 0; i < rows.length; i++) {
			var css_element =rows[i];
			css_element.style.display =  "none";
		} 
		var rows= getElementsByClass(element, 'plus');
		for (i = 0; i < rows.length; i++) {
			var css_element =rows[i];
			css_element.style.display = "";
		} 
	} else {
		for (j = 0; j < arguments.length; j++) {
			var rows= getElementsByClass(element, arguments[j]);
			for (i = 0; i < rows.length; i++) {
				var css_element =rows[i];
				css_element.style.display = "none";
			} 
			//alert(arguments[j]);
			var plus=get_element("plus_"+arguments[j]);
			if (plus) plus.style.display = "";
			var minus=get_element("minus_"+arguments[j]);
			if (minus) minus.style.display = "none";
			
			
			var buttons= getElementsByClass(element, arguments[j]+"_plus");
			for (k = 0; k < buttons.length; k++) {
				var button_to_close =buttons[k];
				if (button_to_close) button_to_close.style.display = "";
			} 
			
			var buttons= getElementsByClass(element, arguments[j]+"_minus");
			for (k = 0; k < buttons.length; k++) {
				var button_to_open =buttons[k];
				if (button_to_open) button_to_open.style.display = "none";
			} 
			
			
		}
	}
}

function togreg() {
    if (get_element("logform").op[1].checked) show("vpasstxt", "vpass");
    else hide("vpasstxt", "vpass");
}


function togdate() {
    if (get_element("task").date_option.value==4) {hide("start_date", "end_date","duration")};
    if (get_element("task").date_option.value==1) {show("start_date", "end_date"); hide("duration")};
    if (get_element("task").date_option.value==2) {show("start_date", "duration"); hide("end_date")};
    if (get_element("task").date_option.value==3) {show("duration", "end_date"); hide("start_date")};

}

function togdate_proj() {
    if (get_element("project").date_type.value==0) {show("start_date", "end_date");};
    if (get_element("project").date_type.value==1) {show("start_date", "end_date");};
    if (get_element("project").date_type.value==2) {hide("start_date", "end_date");};

}


function togassign(form) {
    if (get_element(form).assign[0].checked) {show("unassigned"); hide("user", "user_group")};
    if (get_element(form).assign[2].checked) {show("user_group"); hide("user", "unassigned")};
    if (get_element(form).assign[1].checked) {show("user"); hide("user_group", "unassigned")};

}

function togtype() {
    if (get_element("task").date_option.value=="start") {hide("date")};
    if (get_element("task").date_option.value=="end") {hide("date")};
    if (get_element("task").date_option.value=="other") {show("date")};

}


// ajax forum submit functions 
// from http://www.captain.at/howto-ajax-form-post-request.php
   var http_request = false;
   function makeRequest(url, span, parameters) {
      http_request = false;
	targetElement=span;
	if (window.XMLHttpRequest) { // Mozilla, Safari,...
         http_request = new XMLHttpRequest();
         if (http_request.overrideMimeType) {
         	// set type accordingly to anticipated content type
            //http_request.overrideMimeType('text/xml');
            http_request.overrideMimeType('text/html');
         }
      } else if (window.ActiveXObject) { // IE
         try {
            http_request = new ActiveXObject("Msxml2.XMLHTTP");
         } catch (e) {
            try {
               http_request = new ActiveXObject("Microsoft.XMLHTTP");
            } catch (e) {}
         }
      }
      if (!http_request) {
         alert('Cannot create XMLHTTP instance');
         return false;
      }
      http_request.onreadystatechange = alertContents;
      http_request.open('GET', url + parameters, true);
      http_request.send(null);
   }

   function alertContents() {
      if (http_request.readyState == 4) {
         if (http_request.status == 200) {
            //alert(http_request.responseText);
            result = http_request.responseText;
            document.getElementById(targetElement).innerHTML = result;            
         } else {
            alert('There was a problem with the request.');
         }
      }
   }
   
   function get(obj) {
      var getstr = "?";
      for (i=0; i<obj.childNodes.length; i++) {
         if (obj.childNodes[i].tagName == "INPUT") {
            if (obj.childNodes[i].type == "text") {
               getstr += obj.childNodes[i].name + "=" + obj.childNodes[i].value + "&";
            }
            if (obj.childNodes[i].type == "checkbox") {
               if (obj.childNodes[i].checked) {
                  getstr += obj.childNodes[i].name + "=" + obj.childNodes[i].value + "&";
               } else {
                  getstr += obj.childNodes[i].name + "=&";
               }
            }
            if (obj.childNodes[i].type == "radio") {
               if (obj.childNodes[i].checked) {
                  getstr += obj.childNodes[i].name + "=" + obj.childNodes[i].value + "&";
               }
            }
         }   
         if (obj.childNodes[i].tagName == "SELECT") {
            var sel = obj.childNodes[i];
            getstr += sel.name + "=" + sel.options[sel.selectedIndex].value + "&";
         }
         
      }
      makeRequest('get.php', getstr);
   }

var dirty;
function taint(flag) {
	dirty = flag;
	//document.all("apply").disabled = !dirty;
}


function check() {
	if (!dirty)
		return true;
	return confirm("You have changes that have not been submitted.\n\n" +
		"To discard your changes press OK.\n" +
		"To continue editing press Cancel."
		
		);
}


function check_submit(form) {
	if (check())
		form.submit();
	else {
		form.reset();	
		return false;
	}
}

