//AJAX Attribute-Value functions
function addUserWeight(eid,aid,weight){
	var url = 'user.functions.php?method=addUserWeight';   
   	var data = 'eid='+eid+'&aid='+aid+'&weight='+weight;
	var myAjax = new Ajax.Request(url,{method: 'post', parameters: data});
}
function addAVs(eid,aid,vals){
	var url = 'user.functions.php?method=addAVs';   
   	var data = 'eid='+eid+'&aid='+aid+'&vals='+escape(vals);
	var myAjax = new Ajax.Request(url,{method: 'post', parameters: data});
}
function updateAVs(eid,aid) {
	//Save Attribute-Values (eid, aid)
	var newValues = $F('editData'+aid).replace(/\n/g,'; ');
	$('viewData'+aid).innerHTML = newValues;//locally update the fields
	$('editData'+aid).value = newValues;//locally update the fields
	$('edit'+aid).toggle(); $('view'+aid).toggle();
	var url = 'user.functions.php?method=updateAVs';   
	var data = 'eid='+eid+'&aid='+aid+'&vals='+escape(newValues);
	var myAjax = new Ajax.Request(url,{method: 'post', parameters: data});
}
function updateUserAttributes(eid,aid) {
	var url = 'user.functions.php?method=updateUserAttributes';   
	var data = 'eid='+eid+'&aid='+aid;
	var myAjax = new Ajax.Request(url,{method: 'post', parameters: data});
}
function cancelAVs(aid){
	$('editData'+aid).value = $('viewData'+aid).innerHTML;
	$('edit'+aid).toggle(); $('view'+aid).toggle();
}
function deleteAttribute(eid,aid) {
	//Delete Attribute-Values (eid, aid)
	//$('view'+aid).setAttribute("style"," background: lightyellow");
	if(confirm("Are you sure you wish to DELETE this attribute and it's corresponding values?")) {
		var url = 'user.functions.php?method=deleteAttribute';   
		var data = 'eid='+eid+'&aid='+aid;
		var myAjax = new Ajax.Request(url,{method: 'post', parameters: data});
		$('view'+aid).toggle();//hides the row
	} 
	//$('view'+aid).setAttribute("style","");
	return false;
}
function deleteAV(eid,aid,val) {
	//Delete Attribute-Value (eid, aid, val) 
	//alert("val: "+val);
	var url = 'user.functions.php?method=deleteAV';   
	var data = 'eid='+eid+'&aid='+aid+'&val='+escape(val);
	var myAjax = new Ajax.Request(url,{method: 'post', parameters: data});
}

//AJAX Comment functions
//User comments
function addComment(eid_to,commentId){
	var $commentStr = $F(commentId);
	var url = 'user.functions.php?method=addComment';   
	var data = 'eid_to='+eid_to+'&comment='+escape($commentStr);
	var myAjax = new Ajax.Request(url,{method: 'post', parameters: data});	
}
function deleteComment(cid){
	var url = 'user.functions.php?method=deleteComment';   
	var data = 'cid='+cid;
	var myAjax = new Ajax.Request(url,{method: 'post', parameters: data});
}
function updateUserDescription(eid,descId){
	var $descStr = $F(descId);
	var url = 'user.functions.php?method=updateUserDescription';   
	var data = 'eid='+eid+'&description='+escape($descStr);
	var myAjax = new Ajax.Request(url,{method: 'post', parameters: data});
}

//Attribute comments
function addAComment(aid,commentId){
	var $commentStr = $F(commentId);
	var url = 'user.functions.php?method=addAComment';   
	var data = 'aid='+aid+'&comment='+escape($commentStr);
	var myAjax = new Ajax.Request(url,{method: 'post', parameters: data});	
}
function deleteAComment(cid){
	var url = 'user.functions.php?method=deleteAComment';   
	var data = 'cid='+cid;
	var myAjax = new Ajax.Request(url,{method: 'post', parameters: data});
}

//AJAX Suggestions
function getAVsR(eid,aid,resultId){
	var url = 'user.functions.php?method=getAVs';   
	var data = 'eid='+eid+'&aid='+aid;
	var myAjax = new Ajax.Updater(resultId,url,{method: 'post', parameters: data});
}
function getAVs(aid,resultId){
	var url = 'user.functions.php?method=getAVs';   
	var data = 'aid='+aid;
	var myAjax = new Ajax.Updater(resultId,url,{method: 'post', parameters: data});
}
function getAVsT(eid,aid,resultId){
	//alert("getAVs("+eid+","+aid+",'"+resultId+"')");
	setTimeout("getAVsR('"+eid+"','"+aid+"','"+resultId+"')",1000);
}
function autoCompleteAttributes(textId, choicesId) {
		var url = 'user.functions.php?method=suggestAttributes';
    new Ajax.Autocompleter(textId, choicesId, url, {paramName: textId, minChars: 1});
}
function autocomplete() {
new Ajax.Autocompleter("autocomplete", "autocomplete_choices", "test.php", {paramName: "autocomplete", minChars: 1});
}
function concatVals(newValsId, newVal){
	if($F(newValsId).length==0) {
		$(newValsId).value = newVal+';';
	} else {
		if($F(newValsId).substr($F(newValsId).length-1) != ';')
			$(newValsId).value += ';';
		$(newValsId).value = $(newValsId).value+' '+newVal+';';	
	}
}
function suggestAttributes(inputFieldId,resultId){
	var inputText = $F(inputFieldId);
	var url = 'user.functions.php?method=suggestAttributes';   
	var data = 'inputText='+escape(inputText);
	var myAjax = new Ajax.Updater(resultId,url,{method: 'post', parameters: data});
}
function suggestSimilarAttributes(inputFieldId,resultId){
	var inputText = $F(inputFieldId);
	var url = 'user.functions.php?method=suggestSimilarAttributes&desc';   
	var data = 'inputText='+escape(inputText);
	var myAjax = new Ajax.Updater(resultId,url,{method: 'post', parameters: data});
}
function suggestVals(attributeFieldId,resultId){
	var attribute = $F(attributeFieldId);
	var url = 'user.functions.php?method=suggestVals';   
	var data = 'attribute='+escape(attribute);
	var myAjax = new Ajax.Updater(resultId,url,{method: 'post', parameters: data});
}
function suggestValsByAttribute(attribute,resultId,valsId){
	var url = 'user.functions.php?method=suggestVals';   
	var data = 'attribute='+escape(attribute)+'&valsId='+escape(valsId);
	var myAjax = new Ajax.Updater(resultId,url,{method: 'post', parameters: data});
}
function suggestLikeAttributes(inputFieldId,resultId){
	var inputText = $F(inputFieldId);
	$(resultId).style.display = '';
	var url = 'user.functions.php?method=suggestLikeAttributes';   
	var myAjax = new Ajax.Autocompleter(inputFieldId, resultId, url, {paramName: "inputText", minChars: 1});
}
function suggestLikeVals(attributeFieldId,inputFieldId,resultId){
	var attribute = $F(attributeFieldId);
	var inputText = $F(inputFieldId);
	$(resultId).style.display = '';
	var url = 'user.functions.php?method=suggestLikeVals'+'&attribute='+escape(attribute);   
	var myAjax = new Ajax.Autocompleter(inputFieldId, resultId, url, {paramName: "inputText", tokens: [';',','], minChars: 0});
}


//Other functions
function toggleTip(el,tip,message){
	var x = findPosX(el);
	var y = findPosY(el);
	tip.style.position = "absolute";
	tip.style.top = y+el.clientHeight;
	tip.style.left = x+el.clientWidth;
	tip.style.background = "#f3f3f3";
	tip.style.border= "1px solid #333";
	tip.style.fontSize="11px";
	tip.style.padding="2px";
	tip.innerHTML = message;
	tip.toggle();
	setTimeout("$('tip').toggle()",1000);
}

function showMenu(el,m,message){
	var x = findPosX(el);
	var y = findPosY(el);
	m.style.position = "absolute";
	m.style.top = y+el.clientHeight;
	m.style.left = x+el.clientWidth;
	m.style.background = "#f3f3f3";
	m.style.border= "1px solid #333";
	m.style.fontSize="11px";
	m.style.padding="2px";
	m.innerHTML = message;
	m.show();
	//setTimeout("m.hide()",1000);
}
/*
function hideAll(elements) {
	for(i=0;i<elements.length; i++){
		elements[i].style.display = 'none';
	}
}*/

//Other
function focusForm() {
	return focusFormAt(0);
}
function focusFormAt(startIndex){
	for(i=startIndex;i<document.forms.length;i++) {
		//alert("form "+i);
		for(j=0;j<document.forms[i].elements.length;j++) {
			if((document.forms[i].elements[j].type=="text" || document.forms[i].elements[j].type=="textarea" || document.forms[i].elements[j].type=="password") && document.forms[i].elements[j].value=='') {
				document.forms[i].elements[j].focus();
				//alert("The field name is: [" + document.forms[i].elements[j].name + "] with value: [" + document.forms[i].elements[j].value + "]");
				return;
			}				
		}
	}
}

//Helper functions
function addEvent(elm, evType, fn, useCapture) {
	if (elm.addEventListener) {
		elm.addEventListener(evType, fn, useCapture);
		return true;
	}
	else if (elm.attachEvent) {
		var r = elm.attachEvent('on' + evType, fn);
		return r;
	}
	else {
		elm['on' + evType] = fn;
	}
}

//New Tests
function findPosX(obj)
{
	var curleft = 0;
	if (obj.offsetParent)
	{
		while (obj.offsetParent)
		{
			curleft += obj.offsetLeft
			obj = obj.offsetParent;
		}
	}
	else if (obj.x)
		curleft += obj.x;
	return curleft;
}

function findPosY(obj)
{
	var curtop = 0;
	if (obj.offsetParent)
	{
		while (obj.offsetParent)
		{
			curtop += obj.offsetTop
			obj = obj.offsetParent;
		}
	}
	else if (obj.y)
		curtop += obj.y;
	return curtop;
}


//graph
function updateGraph(aid,resultId,N,T,uw,cw,ac,df,force){
        updateGraphGG(aid,resultId,N,T,uw,cw,ac,df,force);
}

function updateGraphPNG(aid,resultId,N,T,uw,cw,ac,df,force){
	var url = 'attribute.graph.php';   
	if(!N) N=20; if(!T) T=0; if(!uw) uw=0; if(!cw) cw=0; if(!ac) ac=0; if(!df) df=1; if(!force) force=0;  
	var data = 'aid='+aid+'&T='+T+'&N='+N+'&uw='+uw+'&cw='+cw+'&ac='+ac+'&df='+df+'&force='+force;
	var myAjax = new Ajax.Updater(resultId,url,{method: 'post', parameters: data});
}

//GraphGear
var flashMovie;
function init() {
        if (document.getElementById) {
           flashMovie = document.getElementById("graphgear");
        }
}
function updateGGXML(request) {
        init();
        var xml = request.responseText; //document.liveXml.liveXmlArea.value;        
        flashMovie.liveXML(xml);
}
function updateGraphGG(aid,resultId,N,T,uw,cw,ac,df,force){
	var url = 'attribute.graph.gg.php';   
	if(!N) N=20; if(!T) T=0; if(!uw) uw=0; if(!cw) cw=0; if(!ac) ac=0; if(!df) df=1; if(!force) force=0;       
	var data = 'aid='+aid+'&T='+T+'&N='+N+'&uw='+uw+'&cw='+cw+'&ac='+ac+'&df='+df+'&force='+force+'&output=XML';
	var myAjax = new Ajax.Request(url,{method: 'post', parameters: data, onComplete: updateGGXML});
}

//Extra
/*function isValidEmail(emailAddress) {
	re = /^.+\@(\[?)[a-zA-Z0-9\-\.]+\.([a-zA-Z]{2,3}|[0-9]{1,3})(\]?)$/;//REGEX For Email
	if(emailAddress.match(re)) {
		return true;
	} else { return false; }
}*/