function add(questionID){

	//Increment the count of entries in question.
	var count = parseInt(document.getElementById('question' + questionID + 'entries').value) + 1;
	document.getElementById('question' + questionID + 'entries').value = count;

	//Get the question span to add the fields.
	var questionFields = document.getElementById('question' + questionID);

	var entry = document.createElement('div');
	entry.setAttribute('id', 'question' + questionID + 'entry' + count);

	//Every name field needs a unique ID to know which field triggered auto complete.
	var AlterFirstName = document.createElement('input');
	AlterFirstName.setAttribute('id', 'question' + questionID + 'AlterFirstName' + count);
	AlterFirstName.setAttribute('name', 'AlterFirstName');
	AlterFirstName.setAttribute('type', 'text');
	AlterFirstName.setAttribute('size', '20');
	AlterFirstName.setAttribute('value', '');
	AlterFirstName.onkeydown = new Function('firstAutoComplete(\'' + AlterFirstName.getAttribute('id') + '\');');

	var AlterLastInitial = document.createElement('input');
	AlterLastInitial.setAttribute('id', 'question' + questionID + 'AlterLastInitial' + count);
	AlterLastInitial.setAttribute('name', 'AlterLastInitial');
	AlterLastInitial.setAttribute('type', 'text');
	AlterLastInitial.setAttribute('size', '20');
	AlterLastInitial.setAttribute('value', '');
	AlterLastInitial.onkeydown = new Function('lastAutoComplete(\'' + AlterLastInitial.getAttribute('id') + '\');');

	var deleteButton = document.createElement('input');
	deleteButton.setAttribute('id', 'question' + questionID + 'deleteButton' + count);
	deleteButton.setAttribute('type', 'button');
	deleteButton.setAttribute('value', 'x');
	deleteButton.onclick = new Function('remove(\'' + questionID + '\', \'' + count + '\');');

	var lineBreak = document.createElement('br');

	var errorMsg = document.createElement('span');
	errorMsg.setAttribute('id', entry.id + 'errorMsg');

	entry.appendChild(AlterFirstName);
	entry.appendChild(AlterLastInitial);
	entry.appendChild(deleteButton);
	entry.appendChild(lineBreak);
	entry.appendChild(errorMsg);

	questionFields.appendChild(entry);

	checkAddButton(questionID);
}

function remove(questionID, entryID){
	var temp = document.getElementById('question' + questionID + 'entry' + entryID);
	temp.parentNode.removeChild(temp);

	checkAddButton(questionID);
}

function checkAddButton(questionID){
	//Get number of contacts.
	var maxContacts = parseInt(document.getElementById('question' + questionID + 'maxContacts').value);
	var question = document.getElementById('question' + questionID);
	var inputs = question.getElementsByTagName('input');
	var currentContacts = 0;

	for(var i = 0; i < inputs.length; i++){
		if(inputs[i].getAttribute('name') == 'AlterFirstName') currentContacts++;
	}

	if(currentContacts == maxContacts){
		//Disable add button and exit.
		document.getElementById('question' + questionID + 'addButton').style.display = 'none';
		return;
	}else{
		document.getElementById('question' + questionID + 'addButton').style.display = '';
	}
}


function checkContacts(incompleteSubmit){

    //Get all question nodes.
    var isFN=document.getElementById('qnreType').value=='F';
    var mayBeFN = document.getElementById('qSkipperFlag').value === '1' ; //For FN with Off Roster
    if (!isFN || mayBeFN) //ego-centric questionnaire. Complex validation
    {
        var questions = document.getElementsByName('question');
        var error = false;
        var FIRST_NAME_INDEX = 0;
        var LAST_NAME_INDEX = 1;
        var EMPLOYEE_ID_INDEX = 2;
        var EMAILID_INDEX = 2;
        var VALUE_INDEX = 1;
        var NAME_COUNT = 3;
        var output='';
        var resultsArray = new Array();
        var focusElem=null;
        if(mayBeFN){var rs = new recallSuggest();}
        //var entryRegExp=New RegExp("question*entry*","gi");
        for(var i = 0; i < questions.length; i++)
        {
            var question = document.getElementById(questions[i].value);
            var indEntryError=false;

            //Get the list of first name and last names inside each question.
            var numEntries=document.getElementById(question.id+ 'maxContacts').value;

            var entries = document.getElementsByName(question.id + 'Entry');

            //Check names if question is compulsary.
            var compulsary = document.getElementById(question.id + 'compulsary').value;

            //assume thr's no entry found till one's found
            var fullEmpty = true;

        //Check each question for valid presence of each element
            for(var k = 1; k <= numEntries; k++)
            {
                var entry = document.getElementById(question.id+'entry'+k);
                var AlterFirstName = document.getElementById(question.id+'alterfirstname'+k);
                var AlterLastInitial = document.getElementById(question.id+'alterlastinitial'+k);
                AlterFirstName.value = nameFormat(Trim(AlterFirstName.value));
                AlterLastInitial.value = nameFormat(Trim(AlterLastInitial.value));
                var employeeid = document.getElementById(question.id+'employeeid'+k);
                if(mayBeFN){
                    var AlterEmail = document.getElementById(question.id+'alterEmail'+k);
                    AlterEmail.value = Trim(AlterEmail.value);
                    rs.assignToEMP(AlterEmail.value, question.id+'employeeid'+k);
                }
                var errorMsg = document.getElementById(entry.id + 'errorMsg');
                clearErrorMsg(errorMsg);

                if (AlterFirstName.value == '' || AlterLastInitial.value == '' || (mayBeFN && AlterEmail.value == '') ) {
                    if (AlterFirstName.value == '' && AlterLastInitial.value != '') {
                        error = true;
                        indEntryError = true;
                        fullEmpty = false;
                        if (!focusElem)
                            focusElem = AlterFirstName;
                        setErrorMsg(errorMsg, 1);
                    }
                    else
                        if (AlterLastInitial.value == '' && AlterFirstName.value != '') {
                            error = true;
                            indEntryError = true;
                            fullEmpty = false;
                            if (!focusElem)
                                focusElem = AlterLastInitial;
                            setErrorMsg(errorMsg, 2);
                        }
                                                              <!--- /*For the New type Of Contact with Email*/ --->
                    if(AlterFirstName.value != '' || AlterLastInitial.value != '' && mayBeFN && AlterEmail.value == ''){
                        error = true;
                        indEntryError = true;
                        fullEmpty = false;
                        if (!focusElem)
                            focusElem = AlterEmail;
                        setErrorMsg(errorMsg, 5);
                    }
                    if (incompleteSubmit)
                        clearErrorMsg(errorMsg);
                }
                else //valid Entry - check if this entry is present in same question
                {
                    if(!indEntryError)
                    {
                        fullEmpty=false;
                        found = false;
                        //Check if first name and last name already exists, set flag for question.
                        for(var m = 0; m < resultsArray.length; m++)
                        {
                            if(resultsArray[m][FIRST_NAME_INDEX][VALUE_INDEX] == AlterFirstName.value && resultsArray[m][LAST_NAME_INDEX][VALUE_INDEX] == AlterLastInitial.value)
                            {
                                found = true;
                                //Check for duplicate
                                if(resultsArray[m][NAME_COUNT + i][1] == 1)
                                {
                                    if(!focusElem)
                                        focusElem=errorMsg;
                                    error = true;
                                    indEntryError=true;
                                    if(!incompleteSubmit)
                                        setErrorMsg(errorMsg,3);
                                    if(incompleteSubmit)
                                        clearErrorMsg(errorMsg);
                                }
                                else
                                {
                                    //Set the flag for question i.
                                    resultsArray[m][NAME_COUNT + i][0] = document.getElementById(question.id + 'identifier').value;
                                    resultsArray[m][NAME_COUNT + i][1] = 1;
                                }
                            }
                        }
                        //If not add to list
                        if(!found)
                        {
                            resultsArray[resultsArray.length] = new Array();
                            resultsArray[resultsArray.length - 1][FIRST_NAME_INDEX] = new Array('AlterFirstName', AlterFirstName.value);
                            resultsArray[resultsArray.length - 1][LAST_NAME_INDEX] = new Array('AlterLastInitial', AlterLastInitial.value);
                            if(!mayBeFN){
                                resultsArray[resultsArray.length - 1][EMPLOYEE_ID_INDEX] = new Array('Employeeid', employeeid.value);
                            }
                            else{
                                resultsArray[resultsArray.length - 1][EMAILID_INDEX] = new Array('EmailId', employeeid.value+'|'+AlterEmail.value);
                            }
                            //Fill in array and default 0 values for all questions and 1 for question i.
                            for(var m = 0; m < questions.length; m++)
                            {
                                var tempQuestion = document.getElementById(questions[m].value);
                                value = m == i ? 1 : 0;

                                resultsArray[resultsArray.length - 1][NAME_COUNT + m] = new Array(document.getElementById(tempQuestion.id + 'identifier').value, value);
                            }
                        }
                    }

                }
            }
            if(fullEmpty && compulsary=='true')
            {
                error=true;
                var errorMsg = document.getElementById(question.id+'entry1errorMsg');
                setErrorMsg(errorMsg,0);
                if(!focusElem && !incompleteSubmit)
                    focusElem=document.getElementById(question.id+'entry1').getElementsByTagName('input')[0];
                if(incompleteSubmit)
                    clearErrorMsg(errorMsg);
            }
        }

        resultsArray.sort(sortByAlterFirstName);

        var output = '';
        for(var i = 0; i < resultsArray.length; i++){
            for(var k = 0; k < resultsArray[i].length; k++){
                //output += resultsArray[i][k][0] + '=' + resultsArray[i][k][1]+',';
                if(k < resultsArray[i].length-1)
                    output += resultsArray[i][k][1]+',';
                else
                    output += resultsArray[i][k][1];
            }
            if(i < resultsArray.length-1)
                output += ';';
            //output += '<br />';
        }
        document.getElementById('filtered').value = output;
        if(!error)
        {
            document.getElementById('masterErrorTag').style.display='none';
            document.form1.submit();
            //alert(output);
        }
        else
        {
            if(!incompleteSubmit)
            document.getElementById('masterErrorTag').style.display='';
            return false;
        }
    }
    else //Simple Validation using jquery
    {
        var error=false;
        var output='';
        var ids=$('#contacts').getDataIDs();
        var row;
        var compulsory=document.getElementById('compulsory');
        if(ids.length>0)
        {
            for(i=0;i<ids.length;i++)
            {
                row = $('#contacts').getRowData(ids[i]);
                if(i<ids.length-1)
                    output+=row.firstname+","+row.lastname+","+ids[i]+",1;";
                else
                    output+=row.firstname+","+row.lastname+","+ids[i]+",1";
            }
            document.getElementById('filtered').value=output;
            document.form1.submit();

        }
        else
        {
            if(!incompleteSubmit && isCompulsory)
                $("#error_nocontacts").dialog('open');
            else
            {
                document.getElementById('filtered').value='';
                document.form1.submit();
            }
            return false;
        }
    }

}

function setErrorMsg(field,errorType)
{
    if(field)
    {
        switch(errorType){
            case 0://empty field
              field.innerHTML='Please enter a valid contact name';
              field.className='error_small';
            break;
            case 1:
              field.innerHTML='Please enter a First Name for the contact';
              field.className='error_small';
            break;
            case 2:
              field.innerHTML='Please enter a Last Initial for the contact';
              field.className='error_small';
            break;
            case 3:
              field.innerHTML='Duplicate Entry';
              field.className='error_small';
            break;
            case 4:
              field.innerHTML='Contact not in roster';
              field.className='error_small';
            break;
            case 5:
              field.innerHTML='Please enter a Email ID for the contact';
              field.className='error_small';
            break;
        }
    }
}

function clearErrorMsg(field)
{
	if(field)
	{
		field.innerHTML='';
		field.className='';
	}
}

function nameFormat(str)
{
	if(str==null || str=='')
		return str;
	if(str.length==1)
		return str.toUpperCase();
	return str.substr(0,1).toUpperCase()+str.substr(1,str.length-1).toLowerCase();
}

function Trim(str)
{
    return str.replace(/^\s*([\S\s]*)\b\s*$/, '$1');
}

function autoComplete(id,relatedField)
{
	data = getUniqueNames(relatedField).sort();
    AutoComplete_Create(id, data);
}

function getUniqueNames(relatedField){
	var inputs = document.getElementsByTagName('input');
	var namesArray = new Array();
	var count = 0;

	for(var i = 0; i < inputs.length; 	i++){
		if(inputs[i].name == relatedField){
			namesArray[count++] = inputs[i].value;
		}
	}

	return unique(namesArray);
}

/**
 * Removes duplicates in the array 'a'
 * @author Johan Känngård, http://dev.kanngard.net
 */
function unique(a) {
	tmp = new Array(0);
	for(i=0;i<a.length;i++){
		if(!contains(tmp, a[i])){
			tmp.length+=1;
			tmp[tmp.length-1]=a[i];
		}
	}
	return tmp;
}

/**
 * Returns true if 's' is contained in the array 'a'
 * @author Johan Känngård, http://dev.kanngard.net
 */
function contains(a, e) {
	for(j=0;j<a.length;j++)if(a[j]==e)return true;
	return false;
}

function sortByAlterFirstName(a, b) {
	var x = a[0][1].toLowerCase();
	var y = b[0][1].toLowerCase();
	return ((x < y) ? -1 : ((x > y) ? 1 : 0));
}
