function validate_mail(src) {
	var emailReg = "^[\\w-_\.]*[\\w-_\.]\@[\\w]\.+[\\w]+[\\w]$"; var regex = new RegExp(emailReg); return regex.test(src);
}

function get(id) {
	return document.getElementById(id);
}

String.prototype.trim = function () {
	return this.replace(/^\s*(\S*(\s+\S+)*)\s*$/, "$1");
}; 

function _isArray(obj) {
   if (obj.constructor.toString().indexOf("Array") == -1)
      return false;
   else
      return true;
}

function _killElement(id) {
	var node=get(id);
	node.parentNode.removeChild(node);
}

function _hide(id) {
	get(id).style.visibility = 'hidden';
	get(id).style.display = 'none';
}
function _show(id) {
	var disp = 'block';

	if(id.indexOf('|in') != -1) {
		disp='inline';
		id=id.replace('|in', '');
	}

	get(id).style.display = disp;
	get(id).style.visibility = 'visible';
}

function select_select_box(field, sel_val) {
	if(!get(field)) return false;

	if(sel_val.toString().indexOf(',') != -1) {
		var arvals = sel_val.split(',');

		for(var n=0;n<get(field).options.length;n++) {
			if(arvals.indexOf(get(field).options[n].value) != -1) {
				get(field).options[n].selected = true;
			}
		}
	} else
	for(var n=0;n<get(field).options.length;n++) {
	
		if( isNumeric(get(field).options[n].value) && isNumeric(sel_val)) {
			if(parseInt(get(field).options[n].value) == parseInt(sel_val)) {
				get(field).options[n].selected=true;
				break;
			}
		} else if(get(field).options[n].value.toLowerCase() == sel_val.toLowerCase()) {
			get(field).options[n].selected=true;
			break;
		}
	}
}
function isNumeric(v) {
	v=v.toString();
	var result = v.match(/^[-+]?\d*\.?\d+(?:[eE][-+]?\d+)?$/);

	if (result==null) result=false;
	return result; 
}

function _addEvent(obj, evType, fn){ 
 if (obj.addEventListener){ 
   obj.addEventListener(evType, fn, false); 
   return true; 
 } else if (obj.attachEvent){ 
   var r = obj.attachEvent("on"+evType, fn); 
   return r; 
 } else { 
   return false; 
 } 
}

function getMultiple(ob) {
	var selected = new Array();
	for (var i = 0; i < ob.options.length; i++) {
		if (ob.options[ i ].selected) selected.push(ob.options[ i ].value);
	}
	return selected;
}



var DOMElement =
{
	extend: function(name,fn)
	{
		if(!document.all)
			eval("HTMLElement.prototype." + name + " = fn");
		else
		{
			//
			//	IE doesn't allow access to HTMLElement
			//	so we need to override
			//	*document.createElement
			//	*document.getElementById
			//	*document.getElementsByTagName
			//

			//take a copy of
			//document.createElement
			var _createElement = document.createElement;

			//override document.createElement
			document.createElement = function(tag)
			{
				var _elem = _createElement(tag);
				eval("_elem." + name + " = fn");
				return _elem;
			}

			//take copy of
			//document.getElementById
			var _getElementById = document.getElementById;

			//override document.getElementById
			document.getElementById = function(id)
			{
				var _elem = _getElementById(id);
				eval("_elem." + name + " = fn");
				return _elem;
			}

			//take copy of
			//document.getElementsByTagName
			var _getElementsByTagName = document.getElementsByTagName;

			//override document.getElementsByTagName
			document.getElementsByTagName = function(tag)
			{
				var _arr = _getElementsByTagName(tag);
				for(var _elem=0;_elem<_arr.length;_elem++)
					eval("_arr[_elem]." + name + " = fn");
				return _arr;
			}
		}
	}
};



DOMElement.getPageCoords = function () {
  var coords = {x: 0, y: 0};
  var el = this;
  do {
    coords.x += el.offsetLeft;
    coords.y += el.offsetTop;
  }
  while ((el = el.offsetParent));
  return coords;
};

DOMElement.scrollIntoView = function() {
  var coords = this.getPageCoords();
  window.scrollTo (coords.x, coords.y);
};






var Dialog = new Object();
Dialog.changeOpac = function (opacity, id) {
    var object = get(id).style;
    object.opacity = (opacity / 100);
    object.MozOpacity = (opacity / 100);
    object.KhtmlOpacity = (opacity / 100);
    object.filter = "alpha(opacity=" + opacity + ")";

};
Dialog.make_center = function(id) {
	var elem = get(id);
	var scrollPos = new Dialog.getScrollPos();
	var pageSize = new Dialog.getPageSize();
	var emSize = new Dialog.getElementSize(elem);
	var x = Math.round(pageSize.width/2) - (emSize.width /2) + scrollPos.scrollX;
	var y = Math.round(pageSize.height/2) - (emSize.height /2) + scrollPos.scrollY;	
	elem.style.left = x+'px';
	elem.style.top = y+'px';
};

Dialog.getScrollPos = function() {
	var docElem = document.documentElement;
	this.scrollX = self.pageXOffset || (docElem&&docElem.scrollLeft) || document.body.scrollLeft;
	this.scrollY = self.pageYOffset || (docElem&&docElem.scrollTop) || document.body.scrollTop;
};

Dialog.getPageSize = function() {
	var docElem = document.documentElement
	this.width = self.innerWidth || (docElem&&docElem.clientWidth) || document.body.clientWidth;
	this.height = self.innerHeight || (docElem&&docElem.clientHeight) || document.body.clientHeight;
};

Dialog.getElementSize = function(elem) {
	this.width = elem.offsetWidth ||  elem.style.pixelWidth;
	this.height = elem.offsetHeight || elem.style.pixelHeight;
};

//	==================================================================================

var cDialog = new Object();
var xT = null;
var timers = new Object();

cDialog.createDialog = function() {
	var body = document.getElementsByTagName("body")[0];
	var dbox = document.createElement("div");
	dbox.setAttribute('id', 'trans-msg');
	dbox.innerHTML = '<div id="trans-x"><a href="javascript:cDialog.closeDialog();">x</a></div><div id="trans-message"></div>';
	body.appendChild(dbox);

	window.onscroll = cDialog.maintPos;
	window.onresize = cDialog.maintPos;
}

cDialog.opacity = function(id, opacStart, opacEnd, millisec, callEnd) {

    //speed for each frame
    var speed = Math.round(millisec / 100);
    var timer = 0;
    //determine the direction for the blending, if start and end are the same nothing happens
    if(opacStart > opacEnd) {
        for(i = opacStart; i >= opacEnd; i--) {
            timers[id] = window.setTimeout("Dialog.changeOpac(" + i + ",'" + id + "')",(timer * speed));
            timer++;
        }
    } else if(opacStart < opacEnd) {
        for(i = opacStart; i <= opacEnd; i++)
            {
            timers[id] = window.setTimeout("Dialog.changeOpac(" + i + ",'" + id + "')",(timer * speed));
            timer++;
        }
    }
};

cDialog.maintPos = function() {
	Dialog.make_center('trans-msg');
};

// ============================================================================================================

cDialog.showDialog = function(msg, autohide) {
	if(!get('trans-message')) {
		this.createDialog();
	}
	window.clearTimeout(xT);
	get('trans-message').innerHTML = '';
	get('trans-message').innerHTML = msg;
	Dialog.changeOpac(0, 'trans-msg');
	_show('trans-msg');
	Dialog.make_center('trans-msg');

	this.opacity('trans-msg', 0, 95, 300)


	if(autohide) {
		xT = window.setTimeout("cDialog.closeDialog()", (autohide*1000));
	}

};
cDialog.closeDialog = function() {
	this.opacity('trans-msg', 100, 0, 300);
	window.setTimeout("_hide('trans-msg')", 400);
};


// =============================================================================================================

var cModal = new Object();
cModal.alert = function(txt, callback) {
	cModal.cleanUp();
	get('_c_modal_content_txt').innerHTML = txt;
	get('_c_modal_content_opts').innerHTML = '<input type="button" value="OK" class="isubmit" id="_c_modal_content_opts_ok" onclick="javascript:cModal.close();" />';
	cModal.loadBox();
	get('_c_modal_content_opts_ok').focus();
}
cModal.prompt = function(txt, callback, val) {
	cModal.cleanUp();
	get('_c_modal_content_txt').innerHTML = txt;
	get('_c_modal_content_opts').innerHTML = '<input type="text" class="input" id="_c_modal_content_opts_input" value="'+val+'" /><br /><input type="button" value="Ok" class="bt_dialog" id="_c_modal_content_opts_ok" onclick="javascript:cModal.close('+callback+', true);" /><input type="button" value="Cancel" class="bt_dialog" id="_c_modal_content_opts_ok" onclick="javascript:cModal.close('+callback+', '+false+');" />';
	cModal.loadBox();
	get('_c_modal_content_opts_ok').focus();
	Dialog.changeOpac(65, '_c_modal_content_');
}
cModal.confirm = function(txt, callback, val) {
	cModal.cleanUp();	if(!val) val = true;
	get('_c_modal_content_txt').innerHTML = txt;
	get('_c_modal_content_opts').innerHTML = '<input type="button" value="Yes" class="bt" id="_c_modal_content_opts_ok" onclick="javascript:cModal.close('+callback+', '+val+');" /> <input type="button" value="Cancel" class="bt" id="_c_modal_content_opts_ok" onclick="javascript:cModal.close('+callback+', '+false+');" />';
	cModal.loadBox();
	get('_c_modal_content_opts_ok').focus();

	Dialog.changeOpac(65, '_c_modal_content_');
}
cModal.content = function(html, callback, val) {
	cModal.cleanUp();
	get('_c_modal_content_html').innerHTML = html;
	cModal.loadBox();
	Dialog.changeOpac(65, '_c_modal_content_');
}
cModal.status = function(txt, callback, val) {
	cModal.cleanUp();
	get('_c_modal_content_txt').innerHTML = txt;
	cModal.loadBox();
	Dialog.changeOpac(65, '_c_modal_content_');
}
cModal.init_modal = function() {
	var body = document.getElementsByTagName("body")[0];
	var dbox = document.createElement("div");
	dbox.setAttribute('id', '_c_modal_bg_');
	body.appendChild(dbox);
	Dialog.changeOpac(0,'_c_modal_bg_');

	var dbox = document.createElement("div");
	dbox.setAttribute('id', '_c_modal_content_');
	dbox.innerHTML = '<div id="_c_modal_content_html"></div><div id="_c_modal_content_txt"></div><div id="_c_modal_content_opts"></div>';
	body.appendChild(dbox);
	Dialog.changeOpac(100, '_c_modal_content_');
}

cModal.loadBox = function() {
	var box_w = document.getElementById('_c_modal_bg_');
	var pagesize = new Dialog.getPageSize();
	var scrollPos = new Dialog.getScrollPos();
	var ua = navigator.userAgent;

	window.onscroll = cModal.maintPos;
	window.onresize = cModal.maintPos;

	if(ua.indexOf("MSIE ") != -1) {
		box_w.style.width = pagesize.width+'px';
	} 
	/*else {box_w.style.width = pagesize.width-20+'px';}*/
	box_w.style.height = pagesize.height+scrollPos.scrollY+'px';
	_show('_c_modal_bg_');
	get('_c_modal_content_').style.display = 'block';
	Dialog.make_center('_c_modal_content_');
	get('_c_modal_content_').style.visibility = 'visible';

	cDialog.opacity('_c_modal_bg_', 0, 80, 300);
};
cModal.close = function(callback, val) {
	Dialog.changeOpac(0, '_c_modal_bg_');
	_hide('_c_modal_bg_');
	_hide('_c_modal_content_');
	cModal.cleanUp();
	if(callback) {
callback(val);
//		eval("callback("+val+");");
	}
};

cModal.cleanUp = function() {
	get('_c_modal_content_txt').innerHTML = '';
	get('_c_modal_content_html').innerHTML = '';
	get('_c_modal_content_opts').innerHTML = '';
}

cModal.maintPos = function() {
	
	var box_w = get('_c_modal_bg_');
	var pagesize = new Dialog.getPageSize();
	var scrollPos = new Dialog.getScrollPos();
	var ua = navigator.userAgent;

	if(ua.indexOf("MSIE ") != -1) {box_w.style.width = pagesize.width+'px';} 
	/*else {box_w.style.width = pagesize.width-20+'px';}*/

	if(ua.indexOf("Opera/9") != -1) {box_w.style.height = document.body.scrollHeight+'px';}
	else {box_w.style.height = pagesize.height+scrollPos.scrollY+'px';}
	
	// alternative 1
	box_w.style.height = document.body.scrollHeight+50+'px';	
	
	Dialog.make_center('_c_modal_content_');
};

cModal.hideBG = function() {
	var box_w = get('ibox_w');
	box_w.style.display = "none";

};

setOpacity = function (elemid,value)	{
		var e = get(elemid);
		e.style.opacity = value/10;
		e.style.filter = 'alpha(opacity=' + value*10 + ')';
};



_addEvent(window, 'load', cModal.init_modal);



function xmlhttp_req() {
	var req = null;
    if(window.XMLHttpRequest) {
    	try {
			req = new XMLHttpRequest();
        } catch(e) {
			req = false;
        }
    } else if(window.ActiveXObject) {
       	try {
        	req = new ActiveXObject("Msxml2.XMLHTTP");
      	} catch(e) {
        	try {
          		req = new ActiveXObject("Microsoft.XMLHTTP");
        	} catch(e) {
          		req = false;
        	}
		}
    }
	return req;
}

function _doReq(method, url, query, fn, state) {
	var req = xmlhttp_req(), r='';
		req = new xmlhttp_req();

		method = (method ? method : 'get');
		if(method == 'get') {
			if(query.indexOf('&') == 0) {
				url = url + (query ? '?'+query : '');
			} else {
				url = url + (query ? query : '');
			}
		}

		req.open(method, url, (state ? state : true));
		req.onreadystatechange = function() {
			if (req.readyState == 4) {
				var r=req.responseText;
				fn(r);
			}
		};
		if(method == 'post') {
			req.setRequestHeader('Content-Type', 'application/x-www-form-urlencoded');
		}
		req.send(method == 'post' ? query : null);
}



