function widget_get_elements_by_name(name,tag_name) { // cross-browser method to get named elements
	var ret = new Array();
	var _elements = document.getElementsByName(name); // internet explorer won't return named elements unless input tags
	if(!(_elements && _elements.length && _elements.length > 0) && (tag_name && tag_name.length > 0)) {
		var _elements = document.getElementsByTagName(tag_name);
		if(_elements && _elements.length && _elements.length > 0) {
			for(var i=0,j=0,ic=_elements.length;i<ic;i++) {
				if(_elements[i] && _elements[i].getAttribute) {
					if(_elements[i].getAttribute("name") && _elements[i].getAttribute("name") == name) {
						ret[j] = _elements[i];
						j++;
					}
				}
			}
		}
	} else {
		ret = _elements;
	}
	return ret;
}

function widget_get_value(field_id_or_name) {
	var ret = null;
	if(field_id_or_name && field_id_or_name.length && field_id_or_name.length > 0) {
		var _field_element = document.getElementById(field_id_or_name);
		if(_field_element && _field_element.getAttribute) {
			switch(_field_element.getAttribute("type")) {
				case("text"): { // <input type='text'.../>
					if(_field_element.value) {
						ret = _field_element.value;
					}
					break;
				}
				case("hidden"): { // <input type='hidden'.../>
					if(_field_element.value) {
						ret = _field_element.value;
					}
					break;
				}
				case("button"): { // <input type='button'.../>
					if(_field_element.value) {
						ret = _field_element.value;
					}
					break;
				}
				case("file"): { // <input type='file'.../>
					if(_field_element.value) {
						ret = _field_element.value;
					}
					break;
				}
				case("radio"): { // <input type='radio'.../>
					ret = (_field_element.checked && _field_element.checked == true);
					break;
				}
				case("checkbox"): { // <input type='checkbox'.../>
					ret = (_field_element.checked && _field_element.checked == true);
					break;
				}
				default: { // <textarea...>, <select...>
					if(_field_element.value) {
						ret = _field_element.value;
					} else if(_field_element && _field_element.selectedIndex && _field_element.options && _field_element.options[_field_element.selectedIndex] && _field_element.options[_field_element.selectedIndex].getAttribute) {
						ret = _field_element.options[_field_element.selectedIndex].getAttribute("value");
					}
					break;
				}
			}
		} else {
			_field_element = document.getElementsByName("p_paper_theme");
			if(_field_element && _field_element.length && _field_element.length > 0) {
				if(_field_element[0] && _field_element[0].getAttribute) {
					switch(_field_element[0].getAttribute("type")) {
						case("radio"): {
							for(var i=0,ic=_field_element.length;i<ic;i++) {
								if(_field_element[i] && (_field_element[i].checked && _field_element[i].checked == true) && _field_element[i].getAttribute) {
									ret = _field_element[i].getAttribute("value");
									break;
								}
							}
							break;
						}
					}
				}
			}
		}
	}
	return ret;
}

function widget_copy(source,destination) {
	if(source && destination) {
		var _source      = ((typeof(source) == 'object')?source:((typeof(source) == 'string')?document.getElementById(source):null));
		var _destination = ((typeof(destination) == 'object')?destination:((typeof(destination) == 'string')?document.getElementById(destination):null));
		if((_source && _destination) && (_source && _source.value && _source.value.length > 0) && !(_destination && _destination.value && _destination.value.length > 0)) {
			_destination.value = _source.value;
		}
	}
}
function widget_paste(destination,value) {
	if(destination && (value && value.length >= 0)) {
		var _destination = ((typeof(destination) == 'object')?destination:((typeof(destination) == 'string')?document.getElementById(destination):null));
		if(_destination) {
			_destination.value = value;
		}
	}
}
function widget_text_countme(text_field,helper_field,max_length) {
	if(text_field && text_field != null && helper_field && helper_field != null) {
		var field_id  = document.getElementById(text_field);
		var helper_id = document.getElementById(helper_field);
		if(field_id != null && helper_id != null) {
			var field_len = field_id.value.length;
			if(max_length == null) {
				max_length = 255;
			}
			if(field_len > max_length) {
				field_text = field_id.value;
				field_text = field_text.substring(0,max_length);
				field_id.value = field_text;
				field_len = field_id.value.length;
			}
			var remaining = (max_length - field_len);
			if(remaining < 0) {
				remaining = 0;
			}
			var remain_text = ((remaining == 1)?"1 character remains of the "+max_length+" character limit":remaining + " characters remain of the "+max_length+" character limit");
			if(remaining == 0) {
				helper_id.innerHTML = "&nbsp;No characters remain of the " + max_length + " character limit";
			} else {
				helper_id.innerHTML = "&nbsp;" + remain_text;
			}
		}
	}
	return true;
}

function widget_text_countor(helper_field,max_length) {
	if(helper_field != null) {
		var helper_id = document.getElementById(helper_field);
		if(helper_id) {
			if(helper_id.innerHTML) {
				helper_id.innerHTML = "&nbsp;" + max_length + " character limit";
			}
		}
	}
	return true;
}

function widget_check_max_length(object,maximum_length) {
	if(object.value.length > maximum_length) {
		object.value = object.value.substring(0,maximum_length);
	}
}

function widget_checkbox_states(group,tick_state,layered,layer,disabled_state) {
	// alert("widget_checkbox_states group:"+group+" tick:"+tick_state+" layered:"+layered+" layer:"+layer+" disabled:"+disabled_state);
	// window.status = "widget_checkbox_states group:"+group+" tick:"+tick_state+" layered:"+layered+" layer:"+layer+" disabled:"+disabled_state;
	if(document.getElementById) {
		if(group && group.length>0) {
			var ids = document.getElementById(group+"_id_list");
			if(ids) {
				// alert(ids);
				var id_list = ids.value;
				if(id_list.length>0) {
					var i =0;
					var ids = new Array(1);
					var len = new Array(1);
					// alert(id_list);
					while(id_list.indexOf(",") != -1) {
						if(layered == true) {
							ids[i] = id_list.substr(0,id_list.indexOf(":"));
							len[i] = id_list.substr(id_list.indexOf(":")+1,id_list.indexOf(",")-2);
						} else {
							ids[i] = id_list.substr(0,id_list.indexOf(","));
						}
						// alert("id_list:"+id_list+" i:"+i+" id:"+ids[i]+((layered == true)?" len:"+len[i]:""));
						id_list = id_list.substr(id_list.indexOf(",")+1,id_list.length);
						i++;
					}
					for(i=0;i<ids.length;i++) {
						if(ids[i]) {
							if(layered == true) {
								if(group == "site" && (layer == null || layer == undefined)) { // special case
									var site_box = document.getElementById(group+"_assoc_co_"+ids[i]);
									if(site_box) {
										widget_set_checked(site_box,tick_state);
										widget_set_disabled(site_box,disabled_state);
									}
								}
								for(j=0;j<len[i];j++) {
									// alert(group+"_assoc_"+ids[i]+"_"+j);
									if(layer != null && layer != undefined) {
										if(ids[i] == layer) {
											var layered_box = document.getElementById(group+"_assoc_"+ids[i]+"_"+j);
											if(layered_box) {
												widget_set_checked(layered_box,tick_state);
												widget_set_disabled(layered_box,disabled_state);
											}
										}
									} else {
										var layered_box = document.getElementById(group+"_assoc_"+ids[i]+"_"+j);
										if(layered_box) {
											widget_set_checked(layered_box,tick_state);
											widget_set_disabled(layered_box,disabled_state);
										}
									}
								}
							} else {
								if(group == "agent" && tick_state == null) { // special case
									var all_agents_button = document.getElementById("all_agents_button");
									var no_agents_button  = document.getElementById("no_agents_button");
									widget_set_disabled(all_agents_button,disabled_state);
									widget_set_disabled(no_agents_button,disabled_state);
								}
								var box = document.getElementById(group+"_assoc_"+ids[i]);
								if(box) {
									widget_set_checked(box,tick_state);
									widget_set_disabled(box,disabled_state);
								}
							}
						}
					}
				}
			}
		}
	}
}

function widget_set_checked(widget,state) {
	if(widget && state != null && state != undefined) {
		widget.checked = state;
	}
}

function widget_set_disabled(widget,state) {
	if(widget && state != null && state != undefined) {
		widget.disabled = state;
	}
}
function widget_display(id,display) {
	if(id) {
		var _id      = ((typeof(id) == "object" || typeof(id) == "function")?id:((typeof(id) == "string")?((document.getElementsByName(id))?document.getElementsByName(id):document.getElementById(id)):null));
		var _display = ((typeof(display) == "boolean")?display:false);
		
		if((typeof(_id) == "object" || typeof(_id) == "function")) {
			if(_id.length && _id.length > 0) {
				for(var i=0,c=_id.length;i<c;i++) {
					if(_id[i] && _id[i].style) {
						_id[i].style.display = ((_display!==true)?"none":"");
					} else {
						_id[i].style = ((_display!==true)?"display:none;":"");
					}
				}
			} else {
				if(_id.style) {
					_id.style.display = ((_display!==true)?"none":"");
				} else {
					_id.style = ((_display!==true)?"display:none;":"");
				}
			}
		// } else { alert(typeof(_id));
		}
	}
}
function widget_value_select(id,value) {
	if(id) {
		var _id    = ((typeof(id) == "object" || typeof(id) == "function")?id:((typeof(id) == "string")?((document.getElementsByName(id))?document.getElementsByName(id):document.getElementById(id)):null));
		var _value = ((typeof(value) == "string" || typeof(value) == "number")?value:null);
		
		if(typeof(_id) == "object" || typeof(_id) == "function") {
			if(_id.length && _id.length > 0) {
				for(var i=0,c=_id.length;i<c;i++) {
					if(_id[i]) {
						_id[i].checked = (_id[i].value && _id[i].value == _value);
					}
				}
			} else {
				_id.checked = (_id.value && _id.value == _value);
			}
		} else {
			alert("widget_value_select("+id+","+value+") id was not an object or function reference:"+typeof(_id));
		}
	}
}
function widget_style_set_css_classes(id,classes,overwrite) {
	var _id        = ((typeof(id) == "object")?id:((typeof(id) == "string")?((document.getElementById(id))?document.getElementById(id):null):null));
	var _classes   = ((typeof(classes) == "string")?classes:null);
	var _overwrite = ((typeof(overwrite) == "boolean")?overwrite:false);
	
	if(_id && _classes && _classes.length >= 0) {
		/*
		if((_id.style.getAttribute("className") && _id.getAttribute("className").length > 0) || (_id.getAttribute("class") && _id.getAttribute("class").length > 0)) {
			_id.style.setAttribute("className",_id.getAttribute("className") + _classes);
			_id.style.setAttribute("class",_id.getAttribute("class") + _classes);
		} else {
			_id.style.setAttribute("className",_classes);
			_id.style.setAttribute("class",_classes);
		}
		*/
		
		// alert("before: " + (_id.getAttribute("class") || _id.getAttribute("className")));
		
		/*
		if(id.style && id.style.getAttribute) {
			if(_overwrite !== true && (_id.style.getAttribute("className").length && _id.style.getAttribute("className").length > 0 || _id.style.getAttribute("class").length && _id.style.getAttribute("class").length > 0)) { // || (_id.getAttribute("class") && _id.getAttribute("class").length > 0)) {
				_id.style.setAttribute("className",_id.style.getAttribute("className") + " " + _classes);
				_id.style.setAttribute("class",_id.style.getAttribute("class") + " " + _classes);
			} else {
				_id.style.setAttribute("className",_classes);
				_id.style.setAttribute("class",_classes);
			}
		} else {
			if(id.setAttribute) {
				if(_overwrite !== true && (_id.getAttribute("className") && _id.getAttribute("className").length && _id.getAttribute("className").length > 0 || _id.getAttribute("class") && _id.getAttribute("class").length && _id.getAttribute("class").length > 0)) { // || (_id.getAttribute("class") && _id.getAttribute("class").length > 0)) {
					_id.setAttribute("className",_id.getAttribute("className") + " " + _classes);
					_id.setAttribute("class",_id.getAttribute("class") + " " + _classes);
				} else {
					_id.setAttribute("className",_classes);
					_id.setAttribute("class",_classes);
				}
			} else {
				if(_overwrite !== true) {
					_id.className = _id.className + _classes;
					// _id.class = _id.class + _classes;
				} else {
					_id.className = _classes;
					// _id.class = _classes;
				}
			}
		}
		*/
		
		if(_overwrite !== true) {
			if(_id.className && _id.className.length && _id.className.length > 0) {
				_id.className = _id.className + " " +_classes;
			} else {
				_id.className = _classes;
			}
		} else {
			_id.className = _classes;
		}
	}
}
function widget_style_set_css_text(id,text,overwrite) {
	var _id   = ((typeof(id) == "object")?id:((typeof(id) == "string")?((document.getElementById(id))?document.getElementById(id):null):null));
	var _text = ((typeof(text) == "string")?text:null);
	var _overwrite = ((typeof(overwrite) == "boolean")?overwrite:false);
	
	if(_id && _text && _text.length >= 0) {
		if(id.style && id.style.getAttribute) {
			if(_overwrite !== true && (_id.style.getAttribute("cssText").length > 0)) { // || (_id.getAttribute("class") && _id.getAttribute("class").length > 0)) {
				_id.style.setAttribute("cssText",_id.style.getAttribute("cssText") + _text);
			} else {
				_id.style.setAttribute("cssText",_text);
			}
		} else {
			if(_overwrite !== true && (id.getAttribute("style") && _id.getAttribute("style").length > 0)) { // || (_id.getAttribute("class") && _id.getAttribute("class").length > 0)) {
				_id.setAttribute("style",_id.getAttribute("style") + _text);
			} else {
				_id.setAttribute("style",_text);
			}
		}
	}
}
function widget_element_stylize(id,classes,styles,overwrite,tag_name) {
	if(id) {
		// var _id      = ((typeof(id) == "object" || typeof(id) == "function")?id:((typeof(id) == "string")?((document.getElementsByName(id))?document.getElementsByName(id):document.getElementById(id)):null));
		var _id      = ((typeof(id) == "object" || typeof(id) == "function")?id:((typeof(id) == "string")?((document.getElementById(id))?document.getElementById(id):widget_get_elements_by_name(id,tag_name)):null));
		var _classes = ((typeof(classes) == "string")?classes:null);
		var _styles  = ((typeof(styles) == "string")?styles:null);
		var _overwrite = ((typeof(overwrite) == "boolean")?overwrite:false);
		
		// alert("widget_element_stylize("+id+" ("+typeof(_id)+"),"+classes+","+styles+","+overwrite+")");
		
		if(typeof(_id) == "object" || typeof(_id) == "function") {
			if(_id.length && _id.length > 0) {
				for(var i=0,c=_id.length;i<c;i++) {
					if(_id[i]) {
						if(_classes && _classes.length >= 0) {
							widget_style_set_css_classes(_id[i],_classes,_overwrite);
						}
						if(_styles && _styles.length >= 0) {
							widget_style_set_css_text(_id[i],_styles,_overwrite);
						}
					}
				}
			} else {
				if(_classes && _classes.length > 0) {
					widget_style_set_css_classes(_id,_classes,_overwrite);
				}
				if(_styles && _styles.length > 0) {
					widget_style_set_css_text(_id,_styles,_overwrite);
				}
			}
		} else {
			alert("widget_element_stylize("+id+","+_classes+","+_styles+") id was not an object or function reference:"+typeof(_id));
		}
	}
}