// this adds a row containing the innerElement and a hidden field with the number of the row in the table
function addOrderedRow(innerElement, tableName, hrTag, rowArr, rowArrName, counter, outerTag) {

	tb = document.getElementById(tableName);
	tbBody = tb.getElementsByTagName("tbody")[0];
	
	// this is the row that contains the innerElement
	trOut = createRow();
	tbBody.appendChild(trOut);
	trOutId = outerTag + counter;
	trOut.setAttribute("id", trOutId);
	trOut.setAttribute("class", "outerRow")
	tdOut = createColumn();
	trOut.appendChild(tdOut);
	
	inDiv = createDiv();
	tdOut.appendChild(inDiv);
	inDiv.appendChild(innerElement);
	
	b1 = createUpButton("Move Up", "moveUpButton" + counter, counter, hrTag, outerTag, rowArrName);
	b2 = createDownButton("Move Down", "moveDownButton" + counter, counter, hrTag, outerTag, rowArrName);
	b3 = createDeleteButton("Delete", "deleteButton" + counter, counter, hrTag, outerTag, rowArrName);
	
	h1 = createHiddenField(hrTag + counter, hrTag + counter, rowArr.length)
	
	inDiv.appendChild(b1);
	inDiv.appendChild(b2);
	inDiv.appendChild(b3);
	inDiv.appendChild(h1);
	
	rowArray = new Array();
	rowArray.push(trOut.id);
	rowArray.push(h1.id);
	
	rowArr.push(rowArray);
}


function createRow() 
{
	return document.createElement("tr");
}

function createColumn() 
{
	return document.createElement("td");
}

function createLabel(for_val, text) 
{
	var ret = document.createElement("label");
	ret.setAttribute("for", for_val);
	t_val = document.createTextNode(text);
	ret.appendChild(t_val);
	return ret;
}

function createTextBox(id, name)
{
	var ret = document.createElement("input");
	ret.setAttribute("id", id);
	ret.setAttribute("type", "text");
	ret.setAttribute("size", "30");
	ret.setAttribute("name", name);
	return ret;
}

function createDiv()
{
	var ret = document.createElement("div");
	return ret;
}

function createTextArea(id, name)
{
	var ret = document.createElement("textarea");
	ret.setAttribute("id", id);
	ret.setAttribute("wrap", "virtual");
	ret.setAttribute("rows", "5");
	ret.setAttribute("name", name);
	ret.setAttribute("cols", "40");
	return ret;
}

function createFileInput(id, name)
{
	var ret = document.createElement("input");
	ret.setAttribute("id", id);
	ret.setAttribute("name", name);
	ret.setAttribute("type", "file");
	return ret;
}

function createTable()
{
	var ret = document.createElement("table");
	body = document.createElement("tbody");
	ret.appendChild(body);
	return ret;
}

function createUpButton(name, id, stepVal, hrTag, outerTag, rowArrayName)
{
	var ret = document.createElement("input");
	ret.setAttribute("value", name);
	ret.setAttribute("type", "button");
	ret.setAttribute("id", id);
	
	ret.setAttribute("onClick", "doUpButton(" + stepVal + ", \"" + hrTag + "\", \"" + outerTag + "\", " + rowArrayName + ")");

	return ret;
}

function doUpButton(stepVal, hrTag, outerTag, rowArray)
{
	if (moveUp(outerTag + stepVal))	
	{
		swapUp(stepVal, hrTag, rowArray);
	}	
}

function moveUp(id)
{
	prevVal = $j("#" + id).prev();
	$j("#" + id).insertBefore(prevVal);
	return prevVal.length;
}

function swapUp(stepVal, hrTag, rowArray)
{
	index = getIndex(stepVal, hrTag)
	
	holder = rowArray[index];
	rowArray[index] = rowArray[index - 1];
	rowArray[index - 1] = holder;
	fixSteps(rowArray);
}

function createDownButton(name, id, stepVal, hrTag, outerTag, rowArrayName)
{
	var ret = document.createElement("input");
	ret.setAttribute("value", name);
	ret.setAttribute("type", "button");
	ret.setAttribute("id", id);
	
	ret.setAttribute("onClick", "doDownButton(" + stepVal + ", \"" + hrTag + "\", \"" + outerTag + "\", " + rowArrayName + ")");

	return ret;
}

function doDownButton(stepVal, hrTag, outerRowTag, rowArray)
{
	if (moveDown(outerRowTag + stepVal))
	{
		swapDown(stepVal, hrTag, rowArray);
	}
}

function moveDown(id)
{
	nextVal = $j("#" + id).next();
	$j("#" + id).insertAfter(nextVal);
	return nextVal.length;
}

function swapDown(stepVal, hrTag, rowArray)
{
	index = getIndex(stepVal, hrTag)
		
	holder = rowArray[index];
	rowArray[index] = rowArray[index + 1];
	rowArray[index + 1] = holder;
	fixSteps(rowArray);
}


function createDeleteButton(name, id, stepVal, hrTag, outerTag, rowArrayName)
{
	var ret = document.createElement("input");
	ret.setAttribute("value", name);
	ret.setAttribute("type", "button");
	ret.setAttribute("id", id);
	ret.setAttribute("onClick", "doDelete(" + stepVal + ", \"" + hrTag + "\", \"" + outerTag + "\", " + rowArrayName + ")");

	return ret;
}

function doDelete(stepVal, hrTag, outerTag, rowArray)
{
	index = getIndex(stepVal, hrTag)
	rowArray.splice(index, 1);
	fixSteps(rowArray);
	$j("#" + outerTag + stepVal).remove();
}

function getIndex(stepVal, hrTag)
{
	return parseInt($j("#" + hrTag + stepVal).val());
}

function createHiddenField(id, name, value)
{
	var ret = document.createElement("input");
	ret.setAttribute("value", value);
	ret.setAttribute("type", "hidden");
	ret.setAttribute("name", name);
	ret.setAttribute("id", id);
	return ret;
}

function fixSteps(rowArray)
{
	for (var i = 0 ; i < rowArray.length ; i++)
	{
		sa = rowArray[i];
		document.getElementById(sa[1]).setAttribute("value", i);	
	}
}
var equipment_linksCounter = 0;
var equipment_linksRowArray = new Array();
var equipment_linksRowArrayName = "equipment_linksRowArray";
var hiddenEquipment_linksRowTag = "hidden_equipment_links_row"
var equipment_linksOuterRowTag = "equipment_linksOuterRow"

function addEquipment_links(link, hidden_id){
     tbIn = createTable();
     var inBody = tbIn.getElementsByTagName("tbody")[0];
     tr1= createRow();
     inBody.appendChild(tr1);
     td1A = createColumn()
     td1B = createColumn()
     tr1.appendChild(td1A);
     tr1.appendChild(td1B);
     lb1 = createLabel("equipment_links_link_label" + equipment_linksCounter, "Equipment_links Link:")
     tb1 = createTextBox("equipment_links_link_" + equipment_linksCounter, "equipment_linksLink" + equipment_linksCounter);
     td1A.appendChild(lb1);
     td1B.appendChild(tb1);
     if (link)
     {
          tb1.value = link;
     }
     
     if (hidden_id)
     {
          td1A.appendChild(createHiddenField("hf_equipment_links_id_" + equipment_linksCounter, "hf_equipment_links_id_" + equipment_linksCounter, hidden_id));
     }
     
     addOrderedRow(tbIn, "equipment_links_table", hiddenEquipment_linksRowTag, equipment_linksRowArray, equipment_linksRowArrayName, equipment_linksCounter, equipment_linksOuterRowTag);
     equipment_linksCounter += 1;
}

var exerciseCounter = 0;
var exerciseRowArray = new Array();
var exerciseRowArrayName = "exerciseRowArray";
var hiddenExerciseRowTag = "hidden_exercise_row"
var exerciseOuterRowTag = "exerciseOuterRow"

function resetExerciseData()
{
	exerciseCounter = 0;
	exerciseRowArray = new Array();
	exerciseRowArrayName = "exerciseRowArray";
	hiddenExerciseRowTag = "hidden_exercise_row"
	exerciseOuterRowTag = "exerciseOuterRow"
}

function addExercise(exercise, reps, hidden_id)
{
	tbIn = createTable();
	var inBody = tbIn.getElementsByTagName("tbody")[0];
	
	tr1 = createRow();
	
	inBody.appendChild(tr1);
	
	td1A = createColumn();
	td1B = createColumn();
	td1C = createColumn();


	tr1.appendChild(td1A);
	tr1.appendChild(td1B);
	tr1.appendChild(td1C);

	selectClone = document.getElementById("collection_prototype").cloneNode(true);
	selectClone.style.display = 'inline';
	selectClone.name = 'exercise_id_' + exerciseCounter;
	
	lb1 = createLabel("exercise_label" + exerciseCounter, "Reps:")
	
	tb1 = createTextBox("reps_box_" + exerciseCounter, "reps" + exerciseCounter); 
	tb1.size = 3;
	
	if (reps)
	{
		tb1.value = reps;
	}
	
	if (exercise)
	{
		for (var i = 0 ; i < selectClone.options.length ; i++)
		{
			if (selectClone.options[i].text == exercise)
			{
				selectClone.options[i].selected = true
			}
		}
	}
	
	td1A.appendChild(lb1);
	td1B.appendChild(tb1);
	td1C.appendChild(selectClone)
	
	addOrderedRow(tbIn, "routine_table", hiddenExerciseRowTag, exerciseRowArray, exerciseRowArrayName, exerciseCounter, exerciseOuterRowTag);
	
	exerciseCounter += 1;
}

var stepCounter = 0;
var stepRowArray = new Array();
var stepRowArrayName = "stepRowArray";
var hiddenStepRowTag = "hidden_step_row"
var stepOuterRowTag = "stepOuterRow"

function addStep(name, description, hidden_id) {
	tbIn = createTable();
	var inBody = tbIn.getElementsByTagName("tbody")[0];
	
	tr1 = createRow();
	tr2 = createRow();
	tr3 = createRow();
	
	inBody.appendChild(tr1);
	inBody.appendChild(tr2);
	inBody.appendChild(tr3);
	
	td1A = createColumn();
	td1B = createColumn();
	td2A = createColumn();
	td2B = createColumn();
	td3A = createColumn();
	td3B = createColumn();
	
	tr1.appendChild(td1A);
	tr1.appendChild(td1B);
	tr2.appendChild(td2A);
	tr2.appendChild(td2B);
	tr3.appendChild(td3A);
	tr3.appendChild(td3B);
	
	tr2.setAttribute("valign", "top")
	
	lb1 = createLabel("step_name_label" + stepCounter, "Step Name:")
	lb2 = createLabel("step_desc_label" + stepCounter, "Step Description:")
	lb3 = createLabel("step_pic_label" + stepCounter, "Step Pic:")
	
	tb1 = createTextBox("step_name_box_" + stepCounter, "stepName" + stepCounter); 
	ta2 = createTextArea("step_desc_box_" + stepCounter, "stepDescription" + stepCounter);
	fi3 = createFileInput("step_file_box_" + stepCounter, "stepImage" + stepCounter);
	
	if (name)
	{
		tb1.value = name;
	}
	
	if (description)
	{
		ta2.value = description;
	}
	
	td1A.appendChild(lb1);
	td1B.appendChild(tb1);
	td2A.appendChild(lb2);
	td2B.appendChild(ta2);
	td3A.appendChild(lb3);
	td3B.appendChild(fi3);
	
	if (hidden_id)
	{
		td1A.appendChild(createHiddenField("hf_step_id_" + stepCounter, "hf_step_id_" + stepCounter, hidden_id));
	}
	
	addOrderedRow(tbIn, "step_table", hiddenStepRowTag, stepRowArray, stepRowArrayName, stepCounter, stepOuterRowTag);
	stepCounter += 1;
}

