



/*----------------------------------------------------------------------------*/
/* AJAX Auto-completion */

var nonTags = new Array('pigs', 'acquisition');

AutoComplete = function() {
    var oACDS;
    var oAutoComp;

    return {
        init: function(property, category) {
            oACDS = new YAHOO.widget.DS_XHR("./ajaxSearch.php", ["\n", "\t"] );
            oACDS.responseType = YAHOO.widget.DS_XHR.TYPE_FLAT; 
            oACDS.scriptQueryAppend = 'category=' + category + '&property=' + property;
   
            oAutoComp = new YAHOO.widget.AutoComplete(property,property+'_matches', oACDS);
            oAutoComp.queryDelay = 0;
            if (!nonTags.contains(category)) {
            	oAutoComp.delimChar = [","]; 
            }
    		oAutoComp.minQueryLength = 0;
            oAutoComp.maxResultsDisplayed = 10;
            oAutoComp.autoHighlight = false;
            oAutoComp.highlightClassName = "yui-ac-highlight";
            oAutoComp.prehighlightClassName = "yui-ac-prehighlight";
            
			oAutoComp.formatResult = handleFormatResult;
        }
    };
}();

function initSearchBar(elId) {
    var oACDS = new YAHOO.widget.DS_XHR("./ajaxSearchPig.php", ["\n", "\t"] );
	oACDS.responseType = YAHOO.widget.DS_XHR.TYPE_FLAT;
	oACDS.scriptQueryAppend = 'mode=withTags';
   
	var oAutoComp = new YAHOO.widget.AutoComplete(elId,elId+'_matches', oACDS);
    oAutoComp.queryDelay = 0;
    oAutoComp.delimChar = [","]; 
    oAutoComp.maxResultsDisplayed = 10;
    oAutoComp.autoHighlight = false;
    oAutoComp.highlightClassName = "yui-ac-highlight";
    oAutoComp.prehighlightClassName = "yui-ac-prehighlight";
    
	oAutoComp.formatResult = handleFormatResult;
}

function handleFormatResult(aResultItem, sQuery) {
	var sKey = aResultItem[0]; // the entire result key
	if (sKey == '\r') { return '';} // somehow '\r' shows up first
	
	var sKeyQuery = sKey.substr(0, sQuery.length); // the query itself
	var sKeyRemainder = sKey.substr(sQuery.length); // the rest of the result
	
	// ignore case
	var skey = sKey.toLowerCase();
	var squery = sQuery.toLowerCase();
	
	// locate sQuery in sKey
	var ind = skey.indexOf(squery);
	if (ind != 0) { // sQuery not at start
		ind = skey.indexOf(' ' + squery) + 1;
	}
	var len = sQuery.length;
	var sPre = sKey.substr(0, ind);
	var sMid = sKey.substr(ind, len);
	var sPost = sKey.substr(ind+len, sKey.length-(ind+len));
	var s = sPre + '<span class="acQuery">' + sMid + '</span>' + sPost;
	
	return s;
}

/*----------------------------------------------------------------------------*/
/* Ratings */

var init = false;
var rate1, rate2, rate3, rate4, rate5;
var savedRate1, savedRate2, savedRate3, savedRate4, savedRate5;
var rateDesc;

// this will be referenced in the form
var ratingInput;

function initRate() {
	rate1 = document.getElementById('rate1');
	rate2 = document.getElementById('rate2');
	rate3 = document.getElementById('rate3');
	rate4 = document.getElementById('rate4');
	rate5 = document.getElementById('rate5');
	
	rateDesc = document.getElementById('rateDesc');
	ratingInput = document.getElementById('ratingInput');
	
	init = true;
}

function changeSrc(el, src) {
	el.src = src;
}

function rate(num) {
	if (!init) {initRate();}
	
	// save old state
	savedRate1 = rate1.src;
	savedRate2 = rate2.src;
	savedRate3 = rate3.src;
	savedRate4 = rate4.src;
	savedRate5 = rate5.src;
	
	// unset
	rate1.src = 'images/rate/rate01.gif';
	rate2.src = 'images/rate/rate02.gif';
	rate3.src = 'images/rate/rate03.gif';
	rate4.src = 'images/rate/rate04.gif';
	rate5.src = 'images/rate/rate05.gif';
	
	// determine temporary new state
	if (num >= 1) {
		rate1.src = 'images/rate/rate1.gif';
		rateDesc.innerHTML = 'Poor';
	}
	if (num >= 2) {
		rate2.src = 'images/rate/rate2.gif';
		rateDesc.innerHTML = 'Fair';
	}
	if (num >= 3) {
		rate3.src = 'images/rate/rate3.gif';
		rateDesc.innerHTML = 'Good';
	}
	if (num >= 4) {
		rate4.src = 'images/rate/rate4.gif';
		rateDesc.innerHTML = 'Very Good';
	}
	if (num >= 5) {
		rate5.src = 'images/rate/rate5.gif';
		rateDesc.innerHTML = 'Excellent!';
	}
}

function unrate(num) {
	rate1.src = savedRate1;
	rate2.src = savedRate2;
	rate3.src = savedRate3;
	rate4.src = savedRate4;
	rate5.src = savedRate5;
	rateDesc.innerHTML = '';
}

function toggleRateFix(num) {
	// reset
	savedRate1 = 'images/rate/rate01.gif';
	savedRate2 = 'images/rate/rate02.gif';
	savedRate3 = 'images/rate/rate03.gif';
	savedRate4 = 'images/rate/rate04.gif';
	savedRate5 = 'images/rate/rate05.gif';
	
	if (num >= 1) {
		savedRate1 = 'images/rate/rate1.gif';
	}
	if (num >= 2) {
		savedRate2 = 'images/rate/rate2.gif';
	}
	if (num >= 3) {
		savedRate3 = 'images/rate/rate3.gif';
	}
	if (num >= 4) {
		savedRate4 = 'images/rate/rate4.gif';
	}
	if (num >= 5) {
		savedRate5 = 'images/rate/rate5.gif';
	}
	
	ratingInput.value = num;
}

var rateFixedAt;
function getRateFixedAt() {
	return rateFixedAt;
}

/*----------------------------------------------------------------------------*/
/* View */

function selectPic(path) {
	selectedPicAEl = document.getElementById('selectedPicA');
	selectedPicImgEl = document.getElementById('selectedPicImg');
	
	selectedPicAEl.href = path;
	selectedPicImgEl.src = 'phpThumb/phpThumb.php?hp=240&wl=240&src=../' + path;
}

/*----------------------------------------------------------------------------*/
/* Image map */

function highlightMap(part) {
	YAHOO.util.Dom.setStyle(part+'Highlighted', 'visibility', 'visible');
}
function unhighlightMap(part) {
	YAHOO.util.Dom.setStyle(part+'Highlighted', 'visibility', 'hidden');
}

var selectedPart = null;

function selectMap(part) {
	if (selectedPart != null) {
		YAHOO.util.Dom.setStyle(selectedPart+'Selected', 'visibility', 'hidden');
	}
	
	if (selectedPart == part) {
		selectedPart = null;
	}
	else {
		YAHOO.util.Dom.setStyle(part+'Selected', 'visibility', 'visible');
		selectedPart = part;
	}
}

var currentPigId;
/**
 * Called when DDDataPoint is double clicked
 */
function showInfoWindow(e) {
	var id = YAHOO.util.Event.getTarget(e).id;
	var pigId = id.substr(id.indexOf('_') + 1); // skip '..._';
	
	var infoWindow = document.getElementById('infoWindow');
	YAHOO.util.Dom.setStyle(infoWindow, 'visibility', 'visible');
	
	// calculate growth origin
	var dpWidth = removePx(YAHOO.util.Dom.getStyle(pigId, 'width'));
	var dpHeight = removePx(YAHOO.util.Dom.getStyle(pigId, 'height'));
	var dpX = YAHOO.util.Dom.getX(pigId);
	var dpY = YAHOO.util.Dom.getY(pigId);
	
	// set growth origin
	var x0 = dpX + dpWidth/2;
	var y0 = dpY + dpHeight/2;
	
	// calculate target position
	var width = 620;
	var height = 460;
	var midX = YAHOO.util.Dom.getViewportWidth() / 2;
	var midY = YAHOO.util.Dom.getViewportHeight() / 2;
	var xf = midX - width/2;
	var yf = midY - height/2; 
	
	// animate
	var animInfo = new YAHOO.util.Motion(infoWindow, {
						width: { from: 0, to: width },
						height: { from: 0, to: height },
						points: { from: [x0,y0], to: [xf,yf] }
					  }, .5, YAHOO.util.Easing.backOut);
	animInfo.animate(); 
	animInfo.onComplete.subscribe(showInfoCanvas); 
	
	loadInfo(pigId);
}

function hideInfoWindow(source) {
	// hide canvas
	YAHOO.util.Dom.setStyle('infoCanvas', 'visibility', 'hidden');
	
	var infoWindow = document.getElementById('infoWindow');
	
	var x = 650;
	var y = 110;
	
	var animInfo = new YAHOO.util.Motion(infoWindow, {
						width: { to: 0 },
						height: { to: 0 },
						points: { to: [x,y] }
					  }, .2);
	animInfo.animate(); 
	animInfo.onComplete.subscribe(makeHiddenInfoWindow); 
}

function showInfoCanvas() {
	YAHOO.util.Dom.setStyle('infoCanvas', 'visibility', 'visible');
}
function makeHiddenInfoWindow() {
	YAHOO.util.Dom.setStyle('infoWindow', 'visibility', 'hidden');
	
	// set this manually so that scrollbars do not show
	YAHOO.util.Dom.setX('infoWindow', 0);
	YAHOO.util.Dom.setY('infoWindow', 0);
}

function loadInfo(pigId) {
	var infoHeader = document.getElementById('infoHeader');
	infoHeader.innerHTML = ddDataPoints[pigId].name;
	//infoHeader.appendChild(document.createTextNode(pigId));
}

/*----------------------------------------------------------------------------*/
/*  */

function show(elId) {
	YAHOO.util.Dom.setStyle(elId, 'display', 'block');
}
function hide(elId) {
	YAHOO.util.Dom.setStyle(elId, 'display', 'none');
}