﻿var pageIsValid = true;
var searchExpanded = false;

/* COUNTER FOR GOOD AND BAD ANSWERES */
var goodAnsweres = new Array();
var badAnsweres = new Array();
function MarkGoodQuestion(theDiv)
{
	if(badAnsweres.length == 0){pageIsValid = true;}
	var exists = false;
	for(id in goodAnsweres){if(goodAnsweres[id] == theDiv.id){exists = true;}}
	if(!exists){goodAnsweres[goodAnsweres.length] = theDiv.id; theDiv.style.border = "";}
}
function MarkBadQuestion(theDiv)
{
	pageIsValid = false;
	var exists = false;
	for(id in badAnsweres){if(badAnsweres[id] == theDiv.id){exists = true;}}
	if(!exists){badAnsweres[badAnsweres.length] = theDiv.id;}
	if(!exists && requestedSearchResult == true){theDiv.style.border = "1px solid red";}
}
/* COUNTER FOR GOOD AND BAD ANSWERES */

/* ERROR HANDLER */
//onerror = handleOnError;
function handleOnError(msg,url,l)
{
	var txt = "";
	txt="There was an error on this page.\n\n";
	txt+="Error: " + msg + "\n";
	txt+="URL: " + url + "\n";
	txt+="Line: " + l + "\n";
	txt+="Click OK to continue.\n\n";
	//alert(txt);
	
	var m_searchButton = GetDOMElement("m_searchButton");
	var m_searchButtonExpanded = GetDOMElement("m_searchButtonExpanded");
	if(m_searchButton != null){m_searchButton.disabled = false;}
	if(m_searchButtonExpanded != null){m_searchButtonExpanded.disabled = false;}
	
	return true;
}
/* ERROR HANDLER */

function GetSubSelected(theDiv, oldIDs)
{
	var checkedColl = new String();
	if(oldIDs != null){checkedColl = oldIDs;}
	
	if(theDiv.childNodes != null)
	{
		for(var i=0; i < theDiv.childNodes.length; i++)
		{
			if(theDiv.childNodes[i].tagName != null)
			{
				if(theDiv.childNodes[i].tagName == "DIV")
				{
					if(theDiv.childNodes[i].id.indexOf("option_") != -1)
					{checkedColl = GetSubSelected(theDiv.childNodes[i], checkedColl)}
					else if(theDiv.childNodes[i].id.indexOf("question_") != -1)
					{checkedColl = GetSubSelected(theDiv.childNodes[i], checkedColl)}
					else if(theDiv.childNodes[i].id.indexOf("mainQuestion_") != -1)
					{checkedColl = GetSubSelected(theDiv.childNodes[i], checkedColl)}
				}
				else if(theDiv.childNodes[i].tagName == "INPUT")
				{
					if(theDiv.childNodes[i].id != null)
					{
						if(checkedColl.indexOf(theDiv.childNodes[i].id) == -1)
						{
							if(theDiv.childNodes[i].id.indexOf("radio_") != -1)
							{
								if(theDiv.childNodes[i].checked)
								{
									checkedColl = checkedColl + theDiv.childNodes[i].id + ";";
								}
							}
							else if(theDiv.childNodes[i].id.indexOf("check_") != -1)
							{
								if(theDiv.childNodes[i].checked)
								{
									checkedColl = checkedColl + theDiv.childNodes[i].id + ";";
								}
							}
						}
					}
				}
			}
		}
	}
	
	return checkedColl;
}

function IsValid()
{
	var divColl = document.getElementsByTagName("DIV");

	if(divColl != null)
	{
		for(var i=0; i < divColl.length; i++)
		{
			if(divColl[i].id != null)
			{
				if(divColl[i].id.indexOf("mainQuestion_") != -1)
				{
					var validAnswer = ValidateQuestionContainer(divColl[i]);
					if(validAnswer != null)
					{
						MarkGoodQuestion(divColl[i]);
						
						if(validAnswer.id.indexOf("check_") == -1)
						{
							var validAnswerID = validAnswer.id.replace("radio_", "");
							var validAnswerQuestions = document.getElementById("questionContainer_" + validAnswerID);
							if(validAnswerQuestions != null){ValidateSubQuestionContainer(validAnswerQuestions);}
						}
					}
					else{MarkBadQuestion(divColl[i]);}
				}
			}
		}
	}

	return pageIsValid;
	
}

function ValidateQuestionContainer(theDiv)
{
	var result = null;
	if(theDiv.childNodes.length > 0)
	{
		for(var i = 0; i < theDiv.childNodes.length; i++)
		{
			if(theDiv.childNodes[i].tagName == "DIV" && theDiv.childNodes[i].id.indexOf("option_") != -1)
			{
				for(var i2 = 0; i2 < theDiv.childNodes[i].childNodes.length; i2++)
				{
					if(theDiv.childNodes[i].childNodes[i2].tagName == "INPUT")
					{
						if(theDiv.childNodes[i].childNodes[i2].checked == true)
						{
							result = theDiv.childNodes[i].childNodes[i2];
							break;
						}
					}
				}
			}
		}
	}
	return result;
}

function ValidateSubQuestionContainer(subQuestion)
{
	var validAnswer = new Array();
	var mainQuestionLength = 0;
	var mainQuestionLengthValid = 0;
	var countingBoxes = false;
	
	if(subQuestion.childNodes.length > 0)
	{
		for(var i = 0; i < subQuestion.childNodes.length; i++)
		{
			var child1 = subQuestion.childNodes[i];
			if(child1.tagName == "DIV" && child1.id.indexOf("question_") != -1)
			{
				// Hittade en fråga, kollar om frågan fått ett svar
				var hasSelectedAnswere = false;
				mainQuestionLength++;
				
				for(var i2 = 0; i2 < child1.childNodes.length; i2++)
				{
					var child2 = child1.childNodes[i2];
					if(child2.tagName == "DIV" && child2.id.indexOf("option_") != -1)
					{
						// Hittade ett svarsalternativ, kollar om det är valt
						
						for(var i3 = 0; i3 < child2.childNodes.length; i3++)
						{
							var child3 = child2.childNodes[i3];
							if(child3.tagName == "INPUT" && child3.checked == true)
							{
								// Hittade ett valt svarsalternativ
								hasSelectedAnswere = true;
								validAnswer[mainQuestionLengthValid] = child3;
								mainQuestionLengthValid++;
								
								// Kollar om det är en checkbox som är vald
								if(child3.type == "checkbox"){countingBoxes = true;}
							}
						}
					}
				}
				
				if(hasSelectedAnswere){MarkGoodQuestion(child1);}
				else{MarkBadQuestion(child1);}
			}
		}
	}
	
	if((mainQuestionLength == mainQuestionLengthValid) || countingBoxes)
	{
		if(validAnswer != null)
		{
			if(validAnswer.length > 0)
			{
				for(var i = 0; i < validAnswer.length; i++)
				{
					if(validAnswer[i].id.indexOf("check_") == -1)
					{
						var validAnswerID = validAnswer[i].id.replace("radio_", "");
						var validAnswerQuestions = GetDOMElement("questionContainer_" + validAnswerID);
						if(validAnswerQuestions != null){ValidateSubQuestionContainer(validAnswerQuestions);}
					}
				}
			}
		}
		//else{if(subQuestion.id.indexOf("questionContainer_") != -1){subQuestion.style.border = "1px solid red";}}
	}
	//else{if(subQuestion.id.indexOf("questionContainer_") != -1){MarkBadQuestion(subQuestion);}}
}

function UpdateProgressbar()
{
	goodAnsweres = new Array();
	badAnsweres = new Array();
	var isValid = IsValid();
	
	var answered = goodAnsweres.length * 1;
	var notanswered = badAnsweres.length * 1;
	var goodPercent = answered / ((answered + notanswered)) * 100;
	var badPercent = notanswered / ((answered + notanswered)) * 100;
	
	var progressBar1 = GetDOMElement("prograssBar1");
	var progressBar2 = GetDOMElement("prograssBar2");
	if(progressBar1 != null)
	{
		if(isValid){progressBar1.className = "QuestionFormProgressbarGood";}
		else{progressBar1.className = "QuestionFormProgressbarBad"}
		if(goodPercent == 100){progressBar1.className = "QuestionFormProgressbarGood";}
		
		progressBar1.style.width = Math.floor(goodPercent) + "%";
	}
	if(progressBar2 != null)
	{
		if(isValid){progressBar2.className = "QuestionFormProgressbarGood";}
		else{progressBar2.className = "QuestionFormProgressbarBad"}
		if(goodPercent == 100){progressBar2.className = "QuestionFormProgressbarGood";}
		
		progressBar2.style.width = Math.floor(goodPercent) + "%";
	}
	
	var progress = GetDOMElement("progress");
	progress.innerHTML = Math.floor(goodPercent) + "% klart"; 
	
	StoreSelectedAnsweres(currentPageID);
	
	/*
	"Answered: " + answered + "<br />Not Answered: " + notanswered + "<br /><br />Good %: " + goodPercent + "<br />Bad %: " + badPercent;
	progress.innerHTML += "<br />Answered IDs:"
	for(id in goodAnsweres){progress.innerHTML += "<br />" + goodAnsweres[id];}
	
	progress.innerHTML += "<br />Not Answered IDs:"
	for(id in badAnsweres){progress.innerHTML += "<br />" + badAnsweres[id];}
	*/
}

/* ---------- SHOW AND HIDE FUNCTIONS ---------- */
function ShowDiv(id, concurent, update)
{
	var div = GetDOMElement("questionContainer_" + id);
	if(div == null){GetDOMElement("mainQuestion_" + id);}
	if(div == null){GetDOMElement("question_" + id);}
	if(div != null){div.style.visibility = "visible"; div.style.display = "block"; div.style.height = ""; div.style.overflow = "visible";}
	
	if(concurent != null && concurent != "")
	{
		var divColl = document.getElementsByTagName("div");
		for(var i=0; i<divColl.length; i++)
		{
			if(divColl[i].id.indexOf("questionContainer_") != -1)
			{
				if(concurent.indexOf(divColl[i].id) != -1)
				{
					divColl[i].style.visibility = "hidden";
					divColl[i].style.height = "0px";
					divColl[i].style.overflow = "hidden";
					
					UnselectAnsweres(divColl[i]);
				}
			}
		}
	}
	
	div = GetDOMElement("option_" + id);
	if(div != null)
	{
		var id2 = div.getAttribute("parent");
		id2 = id2.replace("questionContainer_", "");
		var div = GetDOMElement("mainQuestion_" + id2);
		
		if(div != null)
		{
			for(var i = 0; i < div.childNodes.length; i++)
			{
				var childDiv = div.childNodes[i];
				if(childDiv.id != null && childDiv.id.indexOf("option_") != -1)
				{
					var questionID = childDiv.id.replace("option_", "");
					var label = GetDOMElement("label_" + questionID);
					var option = GetDOMElement("radio_" + questionID);
					if(option == null){GetDOMElement("check_" + questionID);}
					
					if(option != null)
					{
						if(option.checked == true)
						{
							label.className = "QuestionFormAnswerLabel";
						}
						else
						{
							label.className = "QuestionFormAnswerLabelGrey";
						}
					}
				}
			}
		}
	}
	
	if(update == true){UpdateProgressbar();}
}

function UnselectAnsweres(theDiv)
{
	if(theDiv.childNodes != null)
	{
		for(var i=0; i < theDiv.childNodes.length; i++)
		{
			if(theDiv.childNodes[i].tagName != null)
			{
				if(theDiv.childNodes[i].tagName == "DIV" && theDiv.childNodes[i].id.indexOf("question_") != -1)
				{
					UnselectAnsweres(theDiv.childNodes[i]);
				}
				else if(theDiv.childNodes[i].tagName == "DIV" && theDiv.childNodes[i].id.indexOf("questionContainer_") != -1)
				{
					UnselectAnsweres(theDiv.childNodes[i]);
					// Hides the questions in this container to get the "tree" effect
					HideDiv(theDiv.childNodes[i]);
				}
				else if(theDiv.childNodes[i].tagName == "DIV" && theDiv.childNodes[i].id.indexOf("option_") != -1)
				{
					UnselectAnsweres(theDiv.childNodes[i]);
				}
				else if(theDiv.childNodes[i].tagName == "DIV" && theDiv.childNodes[i].id.indexOf("mainQuestion_") != -1)
				{
					UnselectAnsweres(theDiv.childNodes[i]);
				}
				else if(theDiv.childNodes[i].tagName == "INPUT")
				{
					theDiv.childNodes[i].checked = false;
				}
				
			}
		}
	}
}

function HideDiv(div)
{
	div.style.visibility = "hidden";
	div.style.height = "0px";
	div.style.overflow = "hidden";
}
/* ---------- SHOW AND HIDE FUNCTIONS ---------- */

function ClearForm(pageID)
{
	var clear = confirm("Är du säker på att du vill rensa formuläret?")
	if(clear == true)
	{
		var divColl = document.getElementsByTagName("DIV");
	
		for(var i in divColl)
		{
			var div = divColl[i];
			if(div.id != null && div.id.indexOf("mainQuestion_") != -1){UnselectAnsweres(div);}
		}
		
		UpdateProgressbar();
	}
}

function ClickSelected()
{
	UpdateProgressbar();
}
