function get(id) {
	if(typeof(id)=='object')
    	return id;
	return document.getElementById(id);
}

function getval(elem) {
    elem = get(elem);
	//alert(elem);
    switch(elem.type) {
    case "select-one":
        return elem.options.length<=0?null:elem.options[elem.selectedIndex].value;
    case "checkbox":
        return elem.checked?elem.value:false;
    default:
        return elem.value;
    }
}

function setval(elem, value) {
	if(elem.type) {
		$(get(elem)).val(value);
	}
	else if(typeof(elem.length) == "number") { //radios
		for(var i=0; i<elem.length; i++) {
			//console.log("e.v="+elem[i].value+" val="+value);
			elem[i].checked = (value==elem[i].value);
		}
	}
	else {
		alert("cannot set value for element: " + elem);
	}
}

function sethtml(elem, html) {
	get(elem).innerHTML = html;
}

function redirect(url) {
	window.location = url;
}

function download(url) {
	window.location.href = url;
}


function show(elem, really) {
	if(typeof really=="undefined") really = true;
	elem = get(elem);
	if(elem)
		elem.style.display = really? '': 'none';
}

function hide(elem, really) {
	if(typeof really=="undefined") really = true;
	show(elem, !really);
}

function toggle(elem) {
	elem = get(elem);
	elem.style.display = elem.style.display=='none'? '': 'none';
}

function visible(elem, really) {
	if(typeof really=="undefined") really = true;
	get(elem).style.visibility = really? '': 'hidden';
}


function getform(name) {
	return document.forms[name];
}

var $time = Date.now || function() {
  return +new Date;
};


function submit(form, button, value) {
	form = get(form);
	if(typeof button != "undefined") {
		if(typeof form.elements[button] == "undefined") {
			var b = document.createElement("INPUT");
			b.type = "hidden";
			b.name = button;
			if(typeof value == "undefined")
				value = "1";		
			b.value = value;
			form.appendChild(b);
		}
		else {
			form.elements[button].value = "1";
		}
	}
	form.submit();
}


function css(obj, prop, val) {
	obj = get(obj);
	if(obj) {
		obj.style[prop] = val;
	}
}

function merge(a1, a2, a3) {
	if(typeof a2 == "object")
		for(var k in a2)
			a1[k] = a2[k];

	if(typeof a3 == "object")
		for(var k in a3)
			a1[k] = a3[k];

			
	return a1;
}


function insertAtCursor(myField, myValue) {
	//IE support
	if (document.selection) {
		myField.focus();
		sel = document.selection.createRange();
		sel.text = myValue;
	}
	//MOZILLA/NETSCAPE support
	else if (myField.selectionStart || myField.selectionStart == '0') {
		var startPos = myField.selectionStart;
		var endPos = myField.selectionEnd;
		myField.value = myField.value.substring(0, startPos)
			+ myValue
			+ myField.value.substring(endPos, myField.value.length);
	} else {
		myField.value += myValue;
	}
}


function set_options(sel, options, emptyValue, emptyLabel) {

	var sel = get(sel);


	var oldval = getval(sel);


	for(var i=sel.options.length; i>=0; i--)
		sel.options[i] = null;

	//alert(options['x']);

	//var x = 0;

	
	//console.log(options);
	//console.log(options.length);
	if(typeof(emptyValue) != "undefined") {
		if(typeof(emptyLabel) != "undefined")
			sel.options[0] = new Option(emptyLabel, emptyValue);
		else
			sel.options[0] = new Option("", "");
		
	}

	for(var k in options) {
		var label, value;
		if(typeof(options[k]) == "object" && options[k]!=null) {
			try {
			label = options[k].label;
			value = options[k].value;
			} catch(e) {
				clog("*** EXCEPTION ***");
				clog(options);
				clog("k="+k);
			}
		}
		else {
			label = options[k];
			value = k;
		}
		var opt = new Option(label, value); //options[k].label, options[k].value);
		var idx = sel.options.length;
		sel.options[idx] = opt;
		if(value == oldval) {
			sel.selectedIndex = idx;
			//opt.selected = true;
		}
	}
	
	//clog("END set_options " + sel.name + " selindex="+sel.selectedIndex);
	//console.log(options);

}

function getformvalues(form) {
	var elements = get(form).elements;
	var values = {};
	for(var i=0; i<elements.length; i++) {
		var elem = elements[i];
		values[elem.name] = getval(elem);
	}
	return values;
}

function afis(obj) {
	alert(dump(obj));
	
}

function dump(arr,level) {
	var dumped_text = "";
	if(!level) level = 0;
	
	//The padding given at the beginning of the line.
	var level_padding = "";
	for(var j=0;j<level+1;j++) level_padding += "    ";
	
	if(typeof(arr) == 'object') { //Array/Hashes/Objects 
		for(var item in arr) {
			var value = arr[item];
			
			if(typeof(value) == 'object') { //If it is an array,
				dumped_text += level_padding + "'" + item + "' ...\n";
				dumped_text += dump(value,level+1);
			} else {
				dumped_text += level_padding + "'" + item + "' => \"" + value + "\"\n";
			}
		}
	} else { //Stings/Chars/Numbers etc.
		dumped_text = "===>"+arr+"<===("+typeof(arr)+")";
	}
	return dumped_text;
}

function substr (str, start, len) {
    str += '';
    var end = str.length;
    if (start < 0) {
        start += end;
    }
    end = typeof len === 'undefined' ? end : (len < 0 ? len + end : len + start);
    return start >= str.length || start < 0 || start > end ? !1 : str.slice(start, end);
}

function clog(obj) {
	if(window.console && console.log)
		console.log(obj);
}

function add_option(sel, val, label) {
	sel = get(sel);
	sel.options[sel.options.length] = new Option(label, val);
}

function remove_selected_options(sel) {
	sel = get(sel);
	for(var k=sel.options.length-1; k>=0; k--)
		if(sel.options[k].selected)
			sel.options[k] = null;
}

function select_all_options(sel) {
	sel = get(sel);
	for(var k=0; k<sel.options.length; k++)
		sel.options[k].selected = true;
}

function reload() {
	window.location.reload();
}

function insertAtCursor(myField, myValue) {
	//IE support
	if (document.selection) {
		myField.focus();
		sel = document.selection.createRange();
		sel.text = myValue;// + "\r\n";
	}
	
	//MOZILLA/NETSCAPE support
	else if (myField.selectionStart || myField.selectionStart == '0') {
		var startPos = myField.selectionStart;
		var endPos = myField.selectionEnd;
		myField.value = myField.value.substring(0, startPos)
			+ myValue// + "\r\n"
			+ myField.value.substring(endPos, myField.value.length);

		var crtPos = startPos + myValue.length;
		myField.selectionStart = crtPos;
		myField.selectionEnd = crtPos;
	} else {
		myField.value += myValue;// + "\r\n";
	}
}

function urlencode(str) {
	str = (str+'').toString();
	return encodeURIComponent(str).replace(/!/g, '%21').replace(/'/g, '%27').replace(/\(/g, '%28').replace(/\)/g, '%29').replace(/\*/g, '%2A').replace(/%20/g, '+');
}
