// $Id: util.js 775 2008-09-04 16:02:17Z ashapiro $

// Alex Shapiro 2009, no copyrights, no restrictions, no liability, no responsibility.

function getObj(name){ // returns an element
  if(document.getElementById) this.obj = document.getElementById(name);
  else if(document.all) this.obj = document.all[name];
  return this.obj;
}
function getElementsByClass(val){ // returns an array of elements
	var all = document.all || document.getElementsByTagName('*');
	var arr = [];
	for(var k = 0; k < all.length; k++)	if(all[k].className == val) arr[arr.length] = all[k];
	return arr;
}
function getElementsByClass2(val, root){ // returns an array of elements
	var all = root.all || root.getElementsByTagName('*');
	var arr = [];
	for(var k = 0; k < all.length; k++)	if(all[k].className == val) arr[arr.length] = all[k];
	return arr;
}
function getElementsByAttrib(node, val){ // returns an array of elements
	var elems = node.getElementsByTagName('*');
	var retval = [];
	for(var i = 0; i < elems.length; i++){
		if(elems[i].getAttribute(val)) retval[retval.length] = elems[i];
	}
	return retval;
}
function getElementsByTag(val, root){ // returns an array of elements
	var all = root.all || root.getElementsByTagName('*');
	var arr = [];
	for(var k = 0; k < all.length; k++) if(all[k].tagName.toLowerCase() == val.toLowerCase()) arr[arr.length] = all[k];
	return arr;
}
function realPreviousSibling(node){ // returns previous sibling node
	while(node.previousSibling.nodeType != 1) node = node.previousSibling;
	return node.previousSibling;
}
function realNextSibling(node){ // returns next sibling node
	while(node.nextSibling.nodeType != 1) node = node.nextSibling;
	return node.nextSibling;
}
function realParentNode(node){ // returns parent  node
	while(node.parentNode.nodeType != 1) node = node.parentNode;
	return node.parentNode;
}
function getChildNodes(node){ // returns an array of element child nodes
	var arr = new Array();
	for(var loop = 0; loop < node.childNodes.length; loop++)
		if (node.childNodes[loop].nodeType == 1) arr[arr.length++] = node.childNodes[loop];
	return arr;
}
function xSwapNode(n1, n2){ // swap two elements in the DOM
	var temp = n2.parentNode;
	var n2 = n1.parentNode.replaceChild(n2, n1);
	var n1 = temp.appendChild(n1);
	temp = null;
	return true;
}

function addEvent(el, type, f, capture){ // Attach events to elements i.e. addEvent(window, 'load', function, false);
	if(el.addEventListener){ el.addEventListener(type, f, capture); return true; }
	else if(el.attachEvent){ var o = el.attachEvent('on' + type, f); return o; }
	else{ el['on' + type] = f; }
}
function removeEvent(el, type, f){
  if (el.detachEvent){ el.detachEvent('on'+type, obj[type+f]); el[type+f] = null; }
  else el.removeEventListener(type, f, false);
}

function leftTrim(s){ // trims off whitespaces on the left of a string
	while (s.substring(0,1) == ' ') s = s.substring(1, s.length); return s;
}
function rightTrim(s){ // trims off whitespaces on the right of a string
	while (s.substring(s.length,s.length-1) == ' ') s = s.substring(0, s.length-1); return s;
}
function openDiv(id){
	o = getObj(id);
	o.style.display = "block";
}
function closeDiv(id){
	o = getObj(id);
	o.style.display = "none";
}
function openNewWindow(url) {
	window.open(url,"",'width=774,height=410,scrollbars=yes');
}

// Admin ajax edit
var eNode;
function startEdit(o){
	var t = realParentNode(o);
	eNode = o.cloneNode(true);
	realParentNode(o).removeChild(o);
	var n = document.createElement('a');
	n.innerHTML = "Save";
	//n.setAttribute("href", "#");
	addEvent(n, "click", function(){ endEdit(t); }, false);
	t.appendChild(n);

	var arr = getElementsByTag("td", realParentNode(t));
	for(var i = 1; i < arr.length; i++)
		if(arr[i].tagName && arr[i].tagName.toLowerCase() == "td")
			arr[i].innerHTML = "<input id='field" + i + "' type='text' value='" + arr[i].innerHTML + "'>";
}

function endEdit(o){
	//var f = document.createElement('form');
	var post_str = "";
	var arr_fields = ["Key", "Name", "CultureName", "TextValue", "Description"]
	var arr = getElementsByTag("input", realParentNode(o));
	for(var i = 0; i < arr.length; i++){
		post_str += (post_str == "")? "" : "&";
		post_str += arr_fields[i] + "=" + arr[i].value;
	}

	o.replaceChild(eNode, getElementsByTag("a", o)[0]);	eNode = null;
	var arr = getElementsByTag("td", realParentNode(o));
	for(var i = 1; i < arr.length; i++)
		if(arr[i].tagName && arr[i].tagName.toLowerCase() == "td")
			arr[i].innerHTML = getChildNodes(arr[i])[0].value;

	//alert("/admin/applicationtext/edit/" + record_id + "?" + post_str);
	ajaxPost("/admin/applicationtext/edit/", post_str);
}

function ajaxPost(strURL, data) {
    var self = this;
	var Req = false;
    if(window.XMLHttpRequest) self.Req = new XMLHttpRequest();
    else if(window.ActiveXObject) self.Req = new ActiveXObject("Microsoft.XMLHTTP");
    self.Req.open('POST', strURL, true);
    self.Req.setRequestHeader('Content-Type', 'application/x-www-form-urlencoded');
    self.Req.setRequestHeader("Content-length", data.length);
    self.Req.setRequestHeader("Connection", "close");
    self.Req.onreadystatechange = xmlhttpState;
    self.Req.send(data);
}

function xmlhttpState(){
	if(Req.readyState == 4)
		if(Req.status != 200)  // alert("saved"); else 
			alert('There was a problem with the request.');
}
