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;
	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; 
 } 
}






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, 90, 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 modalOn = false;
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="isubmit" id="_c_modal_content_opts_ok" onclick="javascript:cModal.close('+callback+', true);" /><input type="button" value="Cancel" class="isubmit" id="_c_modal_content_opts_ok" onclick="javascript:cModal.close('+callback+', '+false+');" />';
	cModal.loadBox();
	get('_c_modal_content_opts_ok').focus();
}
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="isubmit" id="_c_modal_content_opts_ok" onclick="javascript:cModal.close('+callback+', '+val+');" /> <input type="button" value="Cancel" class="isubmit" id="_c_modal_content_opts_ok" onclick="javascript:cModal.close('+callback+', '+false+');" />';
	cModal.loadBox();
	get('_c_modal_content_opts_ok').focus();
}
cModal.content = function(html, callback, val) {
	cModal.cleanUp();
	get('_c_modal_content_txt').innerHTML = html;
	cModal.loadBox();
}
cModal.status = function(txt, callback, val) {
	cModal.cleanUp();
	get('_c_modal_content_txt').innerHTML = txt;
	cModal.loadBox();
}
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_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';

	if(!modalOn) { _show('_c_modal_bg_'); }
	
	get('_c_modal_content_').style.display = 'block';
	Dialog.make_center('_c_modal_content_');
	get('_c_modal_content_').style.visibility = 'visible';

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

cModal.cleanUp = function() {
	if(get('_c_modal_content_txt')) get('_c_modal_content_txt').innerHTML = '';
	//get('_c_modal_content_html').innerHTML = '';
	if(get('_c_modal_content_txt')) 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);
}



