// JavaScript Document

/* pncs */
PNCS = {};

PNCS.el = function (s) {
    return (document.getElementById)?document.getElementById(s):document.all[s];
}

PNCS.is = function (s) {
	return (typeof s != undefined);
}

PNCS.ready = function (x) {
	window.addEvent("domready", x);
}

PNCS.addClass = function(element, cn) {
  	if(!element.className) {
      	element.className = cn;
  	} else {
      	element.className = element.className + " " + cn;
	}
}

PNCS.removeClass = function(element, cn) {
	var rep = element.className.match(' ' + cn)? ' ' + cn: cn;
	element.className = element.className.replace(rep, '');	
}

PNCS.widget = {};

PNCS.widget.cef = function (elid) {
	var container = PNCS.el(elid);
	var _self = this;
	this.url = null;
	this.callback = null;
	
	var text = PNCS.dom.child.type(container, 'div');
	var area = PNCS.dom.child.type(container, 'textarea');
	
	// click on uneditable text
	text.onclick = function () {
		area.style.display = 'block';
		text.style.display = 'none';
		area.value = PNCS.string.br2nl(text.innerHTML);
		area.focus();
		area.select();
	}
	
	// leave textarea
	area.onblur = function () {
		area.style.display = 'none';
		text.style.display = 'block';
		if (text.innerHTML != PNCS.string.nl2br(area.value)) {
			text.innerHTML = PNCS.string.nl2br(area.value);
			_self.save();
		}
	}
	
	// hit escape
	area.onkeyup = function (e) {
		if (PNCS.events.escape(e)) {
			area.value = PNCS.string.br2nl(text.innerHTML);
			area.blur();
		}
	}
	
	// save to url
	this.save = function() {
		if (this.url != null) {					
			var dataArray = new Object();
			dataArray['content'] = area.value;
			var sendData = PNCS.ajax.encode(dataArray);
			new PNCS.ajax.send(this.url, sendData, this);
		}
	}
}

PNCS.widget.toggler = function(toggledid, togglerid) {
	var _self = this;
	
	var toggled = PNCS.el(toggledid);
	var totoggle = PNCS.dom.children.type(toggled, 'div');
	for (var i = 0; i < totoggle.length; i++) {
		if (i > 0) {
			totoggle[i].style.display = 'none';
		}
	}	
	
	var toggler = PNCS.el(togglerid);
	var togglerli = toggler.getElementsByTagName('li');
	for (var i = 0; i < togglerli.length; i++) {
		var togglera = togglerli[i].getElementsByTagName('a');
		for (j = 0; j < togglera.length; j++) {
			// set function 
			togglera[j].onclick = function() {
				_self.hideAll();
				_self.toggle(this);
			}
			
			// highlight
			if (i == 0) {
				PNCS.addClass(togglera[j], 'selected');
			}
		}
	}
	
	// hide all divs
	this.hideAll = function() {
		for (var i = 0; i < totoggle.length; i++) {
			totoggle[i].style.display = 'none';
		}
	}
	
	// show one
	this.show = function(m) {
		for (var k = 0; k < totoggle.length; k++) {
			if (k == m) {
				totoggle[k].style.display = 'block';
				PNCS.addClass(totoggle[k], 'selected');
			}
		}
	}
	
	// find the source of the toggling action
	this.toggle = function(trigger) {
		for (var i = 0; i < togglerli.length; i++) {
			var togglera = togglerli[i].getElementsByTagName('a');
			for (j = 0; j < togglera.length; j++) {
				if (togglera[j] == trigger) {
					_self.show(i);
					PNCS.addClass(togglera[j], 'selected');
				} else {
					PNCS.removeClass(togglera[j], 'selected');
				}
			}
		}
	}
}

PNCS.ajax = {};

PNCS.ajax.encode = function(data) {
	var send = '';
	for (var key in data) {
		send += key + "=" + escape(data[key]) + "&";	
	}
	return send;
}

PNCS.ajax.send = function (strURL, data, caller) {
    var xmlHttpReq = false;
    var self = this;
    
    if (window.XMLHttpRequest) {		 	// Mozilla/Safari
        self.xmlHttpReq = new XMLHttpRequest();
    } else if (window.ActiveXObject) {  	// IE
        self.xmlHttpReq = new ActiveXObject("Microsoft.XMLHTTP");
    }
    self.xmlHttpReq.open('POST', strURL, true);
    self.xmlHttpReq.setRequestHeader('Content-Type', 'application/x-www-form-urlencoded');
    self.xmlHttpReq.onreadystatechange = function() {
        if (self.xmlHttpReq.readyState == 4) {
			if(typeof caller.callback == 'function') {
				caller.callback(self.xmlHttpReq.responseText);
			}
        }
    }
    self.xmlHttpReq.send(data);
}

PNCS.ajax.caller = {};

PNCS.ajax.caller = function(strURL, data) {
	new PNCS.ajax.send(strURL, data, this);
}

PNCS.events = {};

PNCS.events.escape = function (e) {
	var kC = null;
	var Esc = null;
	if (window.event) {						// IE
		kC = event.keyCode;
		Esc = 27;
	} else {								// Mozilla/Safari
		kC = e.keyCode;
		Esc = e.DOM_VK_ESCAPE;
	}
  	if (kC == Esc) {
	  	return true;
  	} else {
		return false;  
  	}
}

PNCS.events.char = function(e) {
	if (e.which == null) {
     	char= String.fromCharCode(e.keyCode);    // IE
	} else if (e.which > 0) {
     	char= String.fromCharCode(e.which);	  // All others
	} else {

		
	}
	return char;
}


PNCS.dom = {};

PNCS.dom.child = {};

PNCS.dom.child.type = function (parent, type) {
	children = parent.childNodes;
	for (var i = 0; i < children.length; i++) {
		if (PNCS.is(children[i].nodeName)) {
			nn = children[i].nodeName.toLowerCase();
			if (nn == type) {
				return children[i];	
			}
		}
	}
}

PNCS.dom.children = {};

PNCS.dom.children.type = function (parent, type) {
	var match = new Array();
	children = parent.childNodes;
	for (var i = 0; i < children.length; i++) {
		if (PNCS.is(children[i].nodeName)) {
			nn = children[i].nodeName.toLowerCase();
			if (nn == type) {
				match.push(children[i]);	
			}
		}
	}
	return match;
}

PNCS.string = {};

PNCS.string.stripnl = function(s) {
	s = s.replace(/\r/gi, "");
	s = s.replace(/\n/gi, "");
	return s;
}

PNCS.string.br2nl = function(s) {
	s = PNCS.string.stripnl(s);
	s = s.replace(/<br>/gi, "\n");
	s = s.replace(/<br \/>/gi, "\n");
	return s;
}

PNCS.string.nl2br = function(s) {
	s = s.replace(/\r\n/gi, "\n");
	s = s.replace(/\r/gi, "\n");
	s = s.replace(/\n/gi, "<br />");
	return s;
}

PNCS.toggle = {};

PNCS.toggle.display = function(e) {
	var el = PNCS.el(e);
	if (el.style.display == 'block') {
		el.style.display = 'none';	
	} else {
		el.style.display = 'block';	
	}
}

PNCS.form = function(id, strUrl) {
	var container = PNCS.el(id);
	var _self = this;
	var callback = null;
	var reset = false;
	this.url = strUrl;
	
	this.fields = null;
	this.areas = null;
	this.selects = null;
	
	this.init = function() {
		// mark li elemnts with button
		var listItems = container.getElementsByTagName('li');
		for (var i = 0; i < listItems.length; i++) {
			var field = PNCS.dom.child.type(listItems[i], 'input');
			if (field) {
				if (field.getAttribute('type') == 'button') {
					PNCS.addClass(listItems[i], 'li-button');
				}
			}
		}
		
		// set button action
		this.fields = container.getElementsByTagName('input');
		this.areas = container.getElementsByTagName('textarea'); 
		this.selects = container.getElementsByTagName('select'); 
		
		for (var i = 0; i < this.fields.length; i++) {
			if (this.fields[i].getAttribute('type') == 'button') {
				PNCS.addClass(this.fields[i], 'button');
				this.fields[i].onclick = function() {
					_self.send();	
				}
			}
		}
	}

	// select data from form and send to server
	this.send = function() {
		var dataArray = new Object();
		for (var i = 0; i < this.fields.length; i++) {
			var varName = this.fields[i].getAttribute('name');
			var varValue = this.fields[i].value;
			
			if (this.fields[i].getAttribute('type') == 'checkbox') {
				// check boxes have different value
				if (!this.fields[i].checked) {
					varValue = 'NULL';
				}
			}
			
			dataArray[varName] = varValue;
		}
		
		for (var i = 0; i < this.areas.length; i++) {
			var varName = this.areas[i].getAttribute('name');	
			dataArray[varName] = this.areas[i].value;
		}

		for (var i = 0; i < this.selects.length; i++) {
			var varName = this.selects[i].getAttribute('name');	
			dataArray[varName] = this.selects[i].value;
		}

		var sendData = PNCS.ajax.encode(dataArray);
		new PNCS.ajax.send(this.url, sendData, _self);
		if (_self.reset) {
			_self.resetFields();
		}
	}	
	
	// reset fields to empty values
	this.resetFields = function() {
		for (var i = 0; i < this.fields.length; i++) {
			if (this.fields[i].getAttribute('type') != 'button') {
				this.fields[i].value = '';
			}
		}
		
		for (var i = 0; i < this.areas.length; i++) {
			this.areas[i].value = '';
		}
	}
	
	this.init();
}
