/* OVI Javascript Toolkit */

www_linuxdaq_labs_org_gmap_key="ABQIAAAAqsUkuCQBGoD7pggj58qskRSTNqpofoVS-5rSI1LX9ED5xRJ0jhRROdBr1k39ZhAzF1ks2NFrltP_Vg";
www_linuxdaq_labs_com_gmap_key="ABQIAAAAqsUkuCQBGoD7pggj58qskRRRWD62faQ6N1L3PfBriQXGLrmdnhSM_PlIBHuVTwgX3Kqr6BF2vJm3Ow";
www_sewerageonline_com_gmap_key="ABQIAAAAqsUkuCQBGoD7pggj58qskRQG-li_cNTzvYr1OEbvmcv3O4niyBS3pvDBQY-fGGpTL5pzJAT5SoqQkg";

String.prototype.trim = function(c) {
	var l_re = new RegExp("^" + c + "*");
	var r_re = new RegExp(c + "*$");

	if (c) {
		return this.replace(l_re, '').replace(r_re, '');
	} else {
		return this.replace(/^\s*/, '').replace(/\s*$/, '');
	}
}

function ovi_is_ie()
{
    if (typeof(window.event) == 'undefined')
		return false;
	return true;
}

function ovi_is_firefox()
{
    if (typeof(window.event) == 'undefined')
		return true;
	return false;
}

function ovi_log(msg)
{
    if (typeof(console) == 'undefined')
        return;
    if (typeof(console.log) != 'function')
        return;

    console.log(msg);
    return;
}

function ovi_event_get_pageX(e)
{
	if (ovi_is_ie()) {
		return (event.clientX + document.body.scrollLeft);
	}
	return e.pageX;
}

function ovi_event_get_pageY(e)
{
	if (ovi_is_ie()) {
		return (event.clientY + document.body.scrollTop);
	}
	return e.pageY;
}

function ovi_event_get_offsetX(e)
{
	if (ovi_is_ie()) {
		return event.offsetX;
	}
	var obj = document.getElementById(e.target.id);
	return (e.pageX - obj.x);
}

function ovi_event_get_offsetY(e)
{
	if (ovi_is_ie()) {
		return event.offsetY;
	}
	var obj = document.getElementById(e.target.id);
	return (e.pageY - obj.y);
}

function ovi_event_get_offsetRatioX(e)
{
	if (ovi_is_ie()) {
		var obj = document.getElementById(event.srcElement.id);
		return (event.offsetX/obj.width);
	}
	var obj = document.getElementById(e.target.id);
	return ((e.pageX - obj.x)/obj.width);
}

function ovi_event_get_offsetRatioY(e)
{
	if (ovi_is_ie()) {
		var obj = document.getElementById(event.srcElement.id);
		return (event.offsetY/obj.height);
	}
	var obj = document.getElementById(e.target.id);
	return ((e.pageY - obj.y)/obj.height);
}

function ovi_get_objectX(id)
{
	var obj = document.getElementById(id);
    var curleft = 0;
    if (obj.offsetParent) {
		while(1) {
			curleft += obj.offsetLeft;
			if(!obj.offsetParent)
				break;
			obj = obj.offsetParent;
		}
    } else if(obj.x) {
		curleft += obj.x;
	}
    return curleft;
}

function ovi_get_objectY(id)
{
	var obj = document.getElementById(id);
	var curtop = 0;
	if (obj.offsetParent) {
		while(1) {
			curtop += obj.offsetTop;
			if(!obj.offsetParent)
				break;
			obj = obj.offsetParent;
		}
    } else if(obj.y) {
        curtop += obj.y;
	}
    return curtop;
}

function ovi_include(js_url)
{
	var headNode = document.getElementsByTagName("head")[0];
	var js = document.createElement('script');

	js.type = 'text/javascript';
	js.src  = js_url;

	headNode.appendChild(js);
}

function ovi_ajax_object(force_xml)
{
	var obj = null;
	if(typeof(XMLHttpRequest)!='undefined')
		obj = new XMLHttpRequest();

	var axO=[ 'Msxml2.XMLHTTP.6.0',
			  'Msxml2.XMLHTTP.4.0',
			  'Msxml2.XMLHTTP.3.0',
			  'Msxml2.XMLHTTP',
			  'Microsoft.XMLHTTP'];

	for(var i=0; i<axO.length; ++i)
		try {
			obj = new ActiveXObject(axO[i]);
			break;
		} catch(e) {}


	if (obj && force_xml && obj.overrideMimeType) {
		obj.overrideMimeType('text/xml');
	}
	return obj;
}

function ovi_ajax_do(methodObj, urlObj, cbObj)
{
	methodObj.xml    = methodObj.xml?methodObj.xml:false;
	methodObj.async  = methodObj.async?methodObj.async:false;
	methodObj.method = methodObj.method?methodObj.method:'GET';

	function ovi_ajax_do__callback(reqObj) {

		if (reqObj.readyState == 0) {			/* NOT INIT YET */
		} else if (reqObj.readyState == 1) {	/* SETUP READY  */
		} else if (reqObj.readyState == 2) {	/* SENT         */
		} else if (reqObj.readyState == 3) {	/* PROCESSING   */
		} else if (reqObj.readyState == 4) {	/* COMPLETE     */

			if (methodObj.xml) {
				var testStr = reqObj.responseXML.toString().substr(0,8).toLowerCase();
				if (testStr.match('^error')) {
					alert(reqObj.responseText);
					return;
				}
			} else {
				var testStr = reqObj.responseText.toString().substr(0,8).toLowerCase();
				if (testStr.match('^error')) {
					alert(reqObj.responseText);
					return;
				}
			}

			if (cbObj.callback) {
				return cbObj.callback(reqObj, cbObj.args);
			}
		}
	}

	var reqObj = ovi_ajax_object(methodObj.xml);

	if (methodObj.async) {
		reqObj.onreadystatechange = function () {
			ovi_ajax_do__callback(reqObj);
		}
	}

	if (methodObj.method == 'GET') {
		var toURL;

		if (urlObj.params) {
			toURL = urlObj.url + '?' + urlObj.params;
		} else {
			toURL = urlObj.url;
		}
		reqObj.open(methodObj.method, toURL, methodObj.async);
		reqObj.send(null);


	} else if (methodObj.method == 'POST') {

		reqObj.open(methodObj.method, urlObj.url, methodObj.async);

		reqObj.setRequestHeader("Content-type",  "application/x-www-form-urlencoded");
		reqObj.setRequestHeader("Content-length", urlObj.params?urlObj.params.length:0);
		reqObj.setRequestHeader("Connection",    "close");

		reqObj.send(urlObj.params?urlObj.params:null);
	}

	// for sync. mode, AJAX will not trigger onreadystatechange event,
	// (but IE does trigger that, firebug (not firefox) also trigger that too !!)
	// so we need to do it ourselves.

	if (!methodObj.async) {
		ovi_ajax_do__callback(reqObj);
	}
	return;
}

/* use this value before save into XML and DB */
function ovi_js_escape(str)
{
    if (str == '') return '';
    var s = str.toString();
    s = s.replace(/</g, "#lt#");
    s = s.replace(/>/g, "#gt#");
//  ovi_log("ovi_js_escape(" + str + ") --> " + s);
    return s;
}

/* use this value before display */
function ovi_js_unescape(str)
{
    if (str == '') return '';
    var s = str.toString();
    s = s.replace(/</g, "&lt;");
    s = s.replace(/>/g, "&gt;");
    s = s.replace(/#lt#/g, "&lt;");
    s = s.replace(/#gt#/g, "&gt;");
//  ovi_log("ovi_js_unescape(" + str + ") --> " + s);
    return s;
}

function ovi_mtimer_start()
{
	this.startTIME = new Date().getTime();
}

function ovi_mtimer_stop()
{
	this.endTIME = new Date().getTime();
}

function ovi_mtimer_get_elapsed()
{
	return (this.endTIME-this.startTIME)*1000.;
}

function ovi_mtimer()
{
	this.startTIME = null;
	this.endTIME   = null;
	this.start     = ovi_mtimer_start;
	this.stop      = ovi_mtimer_stop ;
	this.elapsed   = ovi_mtimer_get_elapsed ;
}



