GainersLosers = function(){

	if(Element.get("active")){
		this.activeHeadLinks = Element.get("activeHeader");
		this.activeHeadLinks = this.activeHeadLinks.getElementsByTagName('a');
		this.activeBody = Element.get("activeBody");
	}
	else{
		this.gainersHeadLinks = Element.get("gainersHeader");
		this.gainersHeadLinks = this.gainersHeadLinks.getElementsByTagName('a');
		this.gainersBody = Element.get("gainersBody");

		this.losersHeadLinks = Element.get("losersHeader");
		this.losersHeadLinks = this.losersHeadLinks.getElementsByTagName('a');
		this.losersBody = Element.get("losersBody");
	}
}

GainersLosers.prototype.AttachEvents = function(){
	if(this.activeHeadLinks){
		for(var i = 0; i < this.activeHeadLinks.length; i++){
			Events.add({
				element: this.activeHeadLinks[i],
				type:    "click",
				handler: this.Sort,
				context: this
			});
		}
	}
	else{
	  for(var i = 0; i < this.gainersHeadLinks.length; i++){
			Events.add({
				element: this.gainersHeadLinks[i],
				type:    "click",
				handler: this.Sort,
				context: this
			});

			Events.add({
				element: this.losersHeadLinks[i],
				type:    "click",
				handler: this.Sort,
				context: this
			});
		}
	}
}

GainersLosers.prototype.Sort = function(ev, el){
	var parent = Element.getParent(el, "table");

	if(parent.id == "gainers"){
		var dataEl = this.gainersBody;
		var headLinks = this.gainersHeadLinks;
	}
	else if(parent.id == "losers"){
		var dataEl = this.losersBody;
		var headLinks = this.losersHeadLinks;
	}
	else if(parent.id == "active"){
		var dataEl = this.activeBody;
		var headLinks = this.activeHeadLinks;
	}

	var sorted = false;
	if(el.className && el.className.indexOf("sort") > -1){
		sorted = true;
	}

	var values = this.GetValues(dataEl);

	if(sorted){
		// swap arrow image
		if(el.className == "sortDown"){
			el.className = "sortUp";
		} else {
			el.className = "sortDown";
		}

		var temp = [];
		for(var i = (values.length - 1); i > -1; i--){
			temp.push(values[i]);
		}
		values = temp;
	}
	else{
		el.className = "sortDown";

		var newList = [];
		var largest;
		var largestIdx;
		var done = false;

		while(!done){
			largest = values[0][el.id];
			largestIdx = 0;
			for(var j = 0; j < values.length; j++){
				if(largest < values[j][el.id]){
					largest = values[j][el.id];
					largestIdx = j;
					j = -1;
				}
			}

			newList.push(values[largestIdx]);
			values.splice(largestIdx, 1);

			if(values.length < 2){
				newList.push(values[0]);
				done = true;
			}
		}
		values = newList;

		for(var j = 0; j < headLinks.length; j++){
			if(el.id != headLinks[j].id){
				headLinks[j].className = "";
			}
		}
	}

	this.ReDrawValues(values, dataEl);
	Events.cancel(ev);
}

GainersLosers.prototype.GetValues = function(table){
	var values = [];
	var trs = table.getElementsByTagName("tr");
	for(var i = 0; i < trs.length; i++){
		var obj = {};
		var tds = trs[i].getElementsByTagName("td");
		if(table.id.indexOf("active") > -1){
			obj.symbol = tds[0].getElementsByTagName("a")[0].innerHTML;
			obj.name = tds[1].innerHTML;
			obj.lastDisplay = tds[2].innerHTML;
			obj.last = this.CleanNumber(tds[2].innerHTML); //last
			obj.changeDisplay = tds[3].innerHTML;
			obj.change = this.CleanNumber(tds[3]); // change
			obj.changepctDisplay = tds[4].innerHTML;
			obj.changepct = this.CleanNumber(tds[4]); // change %
			obj.volumeDisplay = tds[5].innerHTML;
			obj.volume = this.CleanNumber(tds[5]);  // volume
		}
		else{
			obj.symbol = tds[0].getElementsByTagName("a")[0].innerHTML;
			obj.name = tds[0].getElementsByTagName("p")[0].innerHTML;
			obj.lastDisplay = tds[1].innerHTML;
			obj.last = this.CleanNumber(tds[1].innerHTML); //last
			obj.changeDisplay = tds[2].innerHTML;
			obj.change = this.CleanNumber(tds[2]); // change
			obj.changepctDisplay = tds[3].innerHTML;
			obj.changepct = this.CleanNumber(tds[3]); // change %
			obj.volumeDisplay = tds[4].innerHTML;
			obj.volume = this.CleanNumber(tds[4]);  // volume
		}
		values.push(obj);
	}

	return values;
}

GainersLosers.prototype.CleanNumber = function(num){
	if(typeof(num) == "object"){
		if(num.lastChild.tagName == "SPAN"){
			num = num.lastChild.innerHTML;
		} else {
			num = num.innerHTML;
		}
	}
	num = num.replace(/'+'/g, '');
	num = num.replace(/%/g, '');
	num = num.replace(/,/g, '');

	return Number(num);
}

GainersLosers.prototype.ReDrawValues = function(values, table){
	Element.removeChildNodes(table);

	for(var i = 0; i < values.length; i++){
		var tr = Element.create("tr", {}, "", table);

		if(table.id.indexOf("active") > -1){
			var link = linkTo('quote', {symbol:values[i].symbol}, 'showbubble');
			var a = Element.create("a", {className:"bold", href:link.href}, values[i].symbol);
			//made change above to link.href

			Events.add({
				element:a,
				type:"mouseover",
				handler: this.CreateBubble,
				context: this
			});

			Events.add({
				element:a,
				type:"mouseout",
				handler: this.CanelBubble,
				context: this
			});

			Element.create("td", {valign:"top"}, a, tr);
			Element.create("td", {className:"sGryTxt"}, values[i].name, tr);
			Element.create("td", {className:"bold pl2", align:"right", valign:"top"}, values[i].lastDisplay, tr);
			Element.create("td", {className:"bold pl2", align:"right", valign:"top"}, values[i].changeDisplay, tr);
			Element.create("td", {className:"pl2", align:"right", valign:"top"}, values[i].changepctDisplay, tr);
			Element.create("td", {className:"pl2", align:"right", valign:"top"}, values[i].volumeDisplay, tr);
		}
		else{
			var link = linkTo('quote', {symbol:values[i].symbol}, 'showbubble');
			var a = Element.create("a", {className:"bold", href:link.href}, values[i].symbol);
			//made change to link.href above

			Events.add({
				element:a,
				type:"mouseover",
				handler: this.CreateBubble,
				context: this
			});

			Events.add({
				element:a,
				type:"mouseout",
				handler: this.CancelBubble,
				context: this
			});

			var td = Element.create("td", {valign:"top"}, a, tr);

			Element.create("p", {className:"sGryTxt"}, values[i].name, td);
			Element.create("td", {className:"bold pl2", align:"right", valign:"top"}, values[i].lastDisplay, tr);
			Element.create("td", {className:"bold pl2", align:"right", valign:"top"}, values[i].changeDisplay, tr);
			Element.create("td", {className:"pl2", align:"right", valign:"top"}, values[i].changepctDisplay, tr);
			Element.create("td", {className:"pl2", align:"right", valign:"top"}, values[i].volumeDisplay, tr);
		}
	}
}

GainersLosers.prototype.CreateBubble = function(ev, el){
	CreateStockBubble(el, el.innerHTML, 175, 1);
}

GainersLosers.prototype.CancelBubble = function(ev, el){
	CancelStockBubble();
}

function InitGainersLosers(){
	gl = new GainersLosers();
	gl.AttachEvents();
}

Events.add({
	element: window,
	type: "load",
	handler: InitGainersLosers
});