var serverBase="/mmx.esp";
var doneStatePostfix="Done";
var failedStatePostfix="Failed";
/*----------------------*/
function $(id){return document.getElementById(id);}
function ddd(){console.log.apply(console, arguments);}
/*----------------------*/
function getSource(e){
	var target;
	if( window.event && window.event.srcElement )
		target = window.event.srcElement;
	if( e && e.target )
		target = e.target;
	while ( target.nodeType != 1 ){
		target = target.parentNode;
	}
	return target;
}
/*----------------------*/
function findParentByAttribute( node, attribute, value ){
	if(!node || node==null){
		return false;
	}
	while(!node.attributes || !node.attributes[attribute] || (node.attributes[attribute].value!=value)){
		node = node.parentNode;
		if(node == document) return false;
	}
	return node;
}
/*----------------------*/
function findChildrenByAttribute( node, attribute, value, tag ){
	if(!node) return false;
	if(typeof tag == 'undefined'){
		tag='div';
	}
	var children = node.getElementsByTagName(tag);
	var found = new Array();
	for (var i=0; i < children.length; i++) {
		var child = children[i];
		if(!child.attributes || !child.attributes[attribute] || (child.attributes[attribute].value!=value)) continue;
		found.push(child);
	};
	return found;
}
/*----------------------*/
function cancelEvent(e){
	if(window.event && window.event.cancelBubble){
		window.event.cancelBubble = true;
		window.event.returnValue = false;
	}
	if(e && e.stopPropagation){
		e.stopPropagation();
		e.preventDefault();
	}
}
/*----------------------*/
function bindEvent( inElement, evt, func, useCapture ){
	element = inElement;
	if(typeof(inElement) == 'string' ){
		element = document.getElementById(inElement);
		if(!element)
			return;
	}
	if( element.addEventListener ){
		element.addEventListener( evt, func, useCapture );
		return true;
	}
	if( element.attachEvent ){
		var r = element.attachEvent( 'on' + evt, func );
		return r;
	}
	element['on' + evt] = func;
}
/*----------------------*/
function ajaxCall( method, callArgs, callParameters, serverBaseOverride ){
	var xmlhttp;
	if(window.XMLHttpRequest){
		xmlhttp = new XMLHttpRequest();
	}else if(window.ActiveXObject){
		xmlhttp = new ActiveXObject("Microsoft.XMLHTTP");
	}else{
		alert("Failed to create an Ajax request object.");
		return;
	}
	xmlhttp.onreadystatechange = function(){
		if(xmlhttp.readyState == 4){
			var command = '';
			if(xmlhttp.status == 200 || xmlhttp.status == 0){
				try{command = eval(method + doneStatePostfix)} catch(e){};
			}else{
				try{command = eval(method + failedStatePostfix)}catch(e){};
			}
			try{command(xmlhttp, callArgs, callParameters);} catch(e){};
		}
	}
	var dataArray = new Array();
	var data = '';
	for(var parameter in callArgs){
		dataArray.push( parameter + '=' + escape(callArgs[parameter]));
	}
	url = serverBase;
	if( typeof serverBaseOverride != 'undefined' ){
		url = serverBaseOverride;
	}
	data = dataArray.join('&');
	//ddd("calling "+ url + " with " + data);
	xmlhttp.open ('POST', url, true);
	xmlhttp.setRequestHeader("Content-Type","application/x-www-form-urlencoded");
	try{ xmlhttp.send(data);}catch(l){
		try{
			command = eval(method + failedStatePostfix);
			command(xmlhttp, callArgs, callParameters);
		}catch(e){}
	}
}
//------------------------------------------------------------//
// set element content
function setElementContent(element,content,how){
	if(!content || content==null){
		content='';
	}
	var e;
	if(typeof(element) == 'string' ){
		e=document.getElementById(element);
		if(!e)return false;
	}else{ e = element;}
	var d;
	if(typeof(content) == 'string'){
		var d=document.createElement("div");
		d.innerHTML=content;
	}else{ d = content;}
	if(!how || how=='replace'){
		setTimeout( function(){
			while(e.firstChild)e.removeChild(e.firstChild);
			e.appendChild(d);
		}, 10);
	}else if(how=='append'){
		setTimeout( function(){
			e.appendChild(d);
		}, 10);
	}else if(how=='prepend'){
		setTimeout( function(){
			e.insertBefore(d,e.firstChild);
		}, 10);
	}
}
//
function loadUrl(url,urlArgs,callParameters){
	var args;
	if((typeof urlArgs == 'undefined') || (urlArgs=='')){
		args = new Object();
		try{
			// parse it from the url
			qs = url.split(/\?/);
			url = qs[0];
			qs = qs[1];
			params = qs.split(/&/);
			for(var i=0; i<params.length;i++){
				token = params[i].split(/\=/);
				args[token[0]] = token[1];
			}
		}catch(e){}
	}else{
		args = urlArgs;
	}
	ajaxCall('loadUrl',args,callParameters,url);
}
// 
function loadUrlDone(xhr, callArgs, callParameters){
	var target;
	var how = 'replace';
	var callBack;
	if(typeof callParameters == 'object'){
		try{target = callParameters.target;}catch(e){};
		try{how = callParameters.how;}catch(e){};
		if(callParameters.onCallDone){
			try{callBack = eval(callParameters.onCallDone)}catch(e){};
		}
	}else{
		target = callParameters;
	}
	if(target){setElementContent(target,xhr.responseText,how);}
	if(callBack){callBack(xhr,callArgs, callParameters);}
}
//
function loadUrlFailed(xhr, callArgs, callParameters){
	var target;
	var how='replace';
	var callBack;
	if(typeof callParameters == 'object'){
		try{target = callParameters.target}catch(e){};
		try{how = callParameters.how}catch(e){};
		if(callParameters.onCallFailed){
			try{callBack = eval(callParameters.onCallFailed)}catch(e){};
		}
	}else{
		target = callParameters;
	}
	var errmsg = "<div><span style=\"font-family:'webdings';color:red\">&#xf069;</span>" + xhr.status+" "+xhr.statusText+"</div>";
	if(target){setElementContent(target,errmsg,how);}
	if(callBack){callBack(xhr,callArgs, callParameters);}
}