
/**
 * Ajax call function
 * @param url
 * @param callback function
 */
function ajaxCall(url, callback) {
	    var http_request = false;

        if (window.XMLHttpRequest) { // Mozilla, Safari, ...
            http_request = new XMLHttpRequest();
            if (http_request.overrideMimeType) {
                http_request.overrideMimeType('text/xml');
                // See note below about this line
            }
        } else if (window.ActiveXObject) { // IE
            try {
                http_request = new ActiveXObject("Msxml2.XMLHTTP");
            } catch (e) {
                try {
                    http_request = new ActiveXObject("Microsoft.XMLHTTP");
                } catch (e) {}
            }
        }

        if (!http_request) {
            alert('Giving up :( Cannot create an XMLHTTP instance');
            return false;
        }
        http_request.onreadystatechange = function() { eval(callback);  };
        http_request.open('GET', url, true);
        http_request.send(null);


}


/**
 * ajax save function
 */
function saveField(id) {

	    var http_request = false;

		if(document.getElementById(id).type == 'radio') {
			val = getRadioValue(id);
			//alert('radio: ' + val);
		} else if (document.getElementById(id).type == 'checkbox') {
			//alert('checkbox');
			val = (document.getElementById(id).checked) ? 1 : 0;
		
		} else {
			val = document.getElementById(id).value;
		}


		var url = 'http://'+serverurl+'/savefield.php?id='+id+'&val='+val;


        if (window.XMLHttpRequest) { // Mozilla, Safari, ...
            http_request = new XMLHttpRequest();
            if (http_request.overrideMimeType) {
                http_request.overrideMimeType('text/xml');
                // See note below about this line
            }
        } else if (window.ActiveXObject) { // IE
            try {
                http_request = new ActiveXObject("Msxml2.XMLHTTP");
            } catch (e) {
                try {
                    http_request = new ActiveXObject("Microsoft.XMLHTTP");
                } catch (e) {}
            }
        }

        if (!http_request) {
            alert('Giving up :( Cannot create an XMLHTTP instance');
            return false;
        }
        http_request.onreadystatechange = function() { alertContents(http_request, id);  };
        http_request.open('GET', url, true);
        http_request.send(null);

}



function alertContents(http_request, id) {
	if (http_request.readyState == 4) {
	    
	    rXML = http_request.responseXML;
	    // everything is good, the response is received
	    //alert(http_request.responseText);
		alert(rXML.getElementsByTagName("response")[0].childNodes[0].nodeValue);
		saveMe(document.getElementById(id));
		// some sort of message
	    //document.getElementById('savemessage').innerHTML = id+' updated';
	} else {
    	// still not ready
    	//alert('there was a problem saving');
	}
}






var bubbleId = 1;
var bTop=0; //bubble top pixel value (calculate as element top - 25, or so)
var bLeft=0; //bubble left pixel value (calculate as element left - 10, or so)
var eVal = ""; //text value for change detection
function getVal(val){
  eVal = val;
}
function saveMe(e){
  if(e.value!=eVal){
    //save content (should have some "content changed" detection, somehow)
    bTop = getRealTop(e)-10;
    bLeft = getRealLeft(e)-20;
    setTimeout("showBubble()",100);
  }
}
function saveMe2(e){
  //save content (should have some "content changed" detection, somehow)
  bTop = getRealTop(e)-10;
  bLeft = getRealLeft(e)-20;
  setTimeout("showBubble()",100);
}
function showBubble(){
  bubbleId = bubbleId == 1 ? 2 : 1;
  bubbleIdName = "bubble_"+bubbleId;
  document.getElementById(bubbleIdName).style.zIndex=10;
  document.getElementById(bubbleIdName).style.top=bTop+"px";
  document.getElementById(bubbleIdName).style.left=bLeft+"px";
  //document.getElementById(bubbleIdName).style.display='block';
  changeOpac(100, bubbleIdName);
  //this is rudimentary, since multiple "hide" timeouts can "stack" and cause a 
  //shorter appearance on the next blur event. should have the timout reset
  //when a blur event is detected
  setTimeout("hideBubble('"+bubbleIdName+"');",1500);
}
function hideBubble(name){
  //what would be REALLY cool, is a fader rather than just disappearing...
  //document.getElementById(name).style.display='none';
  fade(bubbleIdName,99,0,1000);
}
//utility functions
function getRealLeft(e) {
  xPos = e.offsetLeft;
  tempEl = e.offsetParent;
  while (tempEl != null) {
    xPos += tempEl.offsetLeft;
    tempEl = tempEl.offsetParent;
  }
  return xPos;
}
function getRealTop(e) {
  yPos = e.offsetTop;
  tempEl = e.offsetParent;
  while (tempEl != null) {
    yPos += tempEl.offsetTop;
    tempEl = tempEl.offsetParent;
  }
  return yPos;
}
function fade(id, opacStart, opacEnd, millisec) {
  //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
  for(i = opacStart; i >= opacEnd; i-=2) {
    setTimeout("changeOpac(" + i + ",'" + id + "')",(timer * speed));
    timer++;
  }

 document.getElementById(id).style.zIndex = -1;
}

//change the opacity for different browsers
function changeOpac(opacity, id) {
    var object = document.getElementById(id).style;
    object.opacity = (opacity / 100);
    object.MozOpacity = (opacity / 100);
    object.KhtmlOpacity = (opacity / 100);
    object.filter = "alpha(opacity=" + opacity + ")";
} 



/**
 * return checked value of a radio group
 */
function getRadioValue(group){
	var val = 0;
	obj = document.getElementsByName(group);
	
	var radioLength = obj.length;
	
	if(radioLength == undefined)
		if(obj.checked)
			return obj.value;
		else
			return '';


	for(var i = 0; i < radioLength; i++) {
		if(obj[i].checked) {
			return obj[i].value;
		}
	}

}


/**
 * set value of a radio goup
 */
function setRadioValue(group, val){

	grp = document.getElementsByName(group);
	var radioLength = grp.length;
	
	for(var i = 0; i < radioLength; i++) {
		grp[i].checked = false;
		if(grp[i].value == val) {
			grp[i].checked = true
		} 
	}

}


function resetElements() {
	var inputs = document.getElementsByTagName('input');
	var selects = document.getElementsByTagName('select');
	var textareas = document.getElementsByTagName('textarea');

	// Loop through all elements and set to original values
	for(i=0; i<inputs.length; i++){
		if (inputs[i].getAttribute('reset')) {
			//alert("type" + inputs[i].type);
			if (inputs[i].type == 'radio'){
				//alert('setting '+inputs[i].name + ' ' + inputs[i].getAttribute('reset'));
				setRadioValue(inputs[i].name, inputs[i].getAttribute('reset'));
			}
			else {
				inputs[i].value = inputs[i].getAttribute('reset');
			}
		}
	}
	
	for(i=0; i<selects.length; i++){
		if (selects[i].getAttribute('reset')) {
			selects[i].value = selects[i].getAttribute('reset');			
		}
	}


	for(i=0; i<textareas.length; i++){
		if (document.getElementById(textareas[i].id+'_reset')) {
		//	alert(document.getElementById(textareas[i].id+'_reset').innerHTML);
			textareas[i].value = document.getElementById(textareas[i].id+'_reset').innerHTML;			
		} else alert(textareas[i].id+'_reset'+ ' not found!');
	}


}


function swap(name) {
	document.getElementById(name + '_span').style.display = 'none';
	document.getElementById(name).style.display = 'block';
	document.getElementById(name).focus();
} 

function swapBack(name) {
	// Do something with the field to show progress
	doc = document.getElementById(name);
//	alert(document.getElementById(name).type + ' - test');
	document.getElementById(name + '_span').style.display = 'block';
	document.getElementById(name).style.display = 'none';

	if (document.getElementById(name).type == 'text' || document.getElementById(name).type == 'textarea') {
		document.getElementById(name + '_span').innerHTML = document.getElementById(name).value;		
	}
	if (document.getElementById(name).type == 'select' || document.getElementById(name).type == 'select-one' || document.getElementById(name).type == 'radio') {
		document.getElementById(name + '_span').innerHTML = doc.options[doc.selectedIndex].text;
	}


}


function replaceImage(http_request){
	if (http_request.readyState == 4) {
		var image = http_request.responseText;
		image = removeNL(image);
		if (image != "") {
			document.getElementById('bringtofrontimage').src = '/'+image;
			document.getElementById('header').style.backgroundImage= 'url(../'+image+')';
	    } 
	 }
}


function removeNL(s) {
  /*
  ** Remove NewLine, CarriageReturn and Tab characters from a String
  **   s  string to be processed
  ** returns new string
  */
  r = "";
  for (i=0; i < s.length; i++) {
    if (s.charAt(i) != '\n' &&
        s.charAt(i) != '\r' &&
        s.charAt(i) != '\t') {
      r += s.charAt(i);
      }
    }
  return r;
}

function bringToFront(id) {
	Element.toggle('bringtofront');
}

function replaceQuote( http_request ) {
	if (http_request.readyState == 4) {
	
		var quote = http_request.responseText;
		if (quote != "") {
			document.getElementById('quote').innerHTML = quote 
	    } 
	 }
	
}


