// myETests.js
var jsonRaterDtlsObj;
var jsonAltFormatReports;

function initRaterJSON(){
    jsonRaterDtlsObj = json_parse(raterDetailsJSON);
}

function initAltFormatJSON() {
    jsonAltFormatReports = json_parse(altFormatJSON);
}

function initRaterTypeJSON(){
    jsonRaterTypesObj = json_parse(raterTypesJSON);
}

function initTestUserJSON(){
    jsonTestUserObj = json_parse(testUserJSON);
}

function takeAct(a, v) {
    var f = eval('document.frm'+a);

    if (v==null) f.act.value=a.toLowerCase();
    else f.act.value=v;

    f.submit();
}

function assessDetails(q) {
    var f = document.frmAssessmentDetails;

    f.qstId.value = q;
    f.submit();
}

function rateeAssess(r) {
    var f = document.frmRateeDetails;

    f.rateeId.value = r;
    f.submit();
}

function otherAssess(){
    var block = document.getElementById('otherAssessment');
    if (block.className=="hideEditBlock") block.className = 'showEditBlock';
    else if (block.className=="showEditBlock") block.className = 'hideEditBlock';
}

function hideReport(respId){
//    var formObj = document.frmPayParams;
//    formObj.testId.value='';

    var objLink = document.getElementById('linkReport'+respId);
    objLink.innerHTML = "<a href='#' class='contentLinks' onclick='showGetReport("+respId+")'>get Report</a>";

    var objReport = document.getElementById('showReport'+respId);

    newBlock = "<div class='hideEditBlock'></div>"
    objReport.innerHTML = newBlock;
}

function altHideReport(respId){
    var objLink = document.getElementById('colLinkResult'+respId);
    objLink.innerHTML = "<a href='#' class='contentLinks' onclick='altShowGetReport("+respId+")'>get Report</a>";

    var objReport = document.getElementById('altShowReport'+respId);

    newBlock = "<div class='hideEditBlock'></div>"
    objReport.innerHTML = newBlock;
}

function deactivateOtherReports() {
    var j;
    var editObj;
    var altEditObj;
    var myCancel = new RegExp(/cancel/);
    for (j=0; j<jsonReportObj.length; j++){
        editObj = document.getElementById('linkReport'+jsonReportObj[j].reportId);
        altEditObj = document.getElementById('colLinkResult'+jsonReportObj[j].reportId);

        if ( (editObj!=null) && myCancel.test(editObj.innerHTML))
          hideReport(jsonReportObj[j].reportId);
        else if ( (altEditObj!=null) && myCancel.test(altEditObj.innerHTML) )
          altHideReport(jsonReportObj[j].reportId);
    }
}

function chkReportFormat(testId) {
    var altFormat = false;
    for (j=0; j<jsonAltFormatReports.length; j++){
        if (testId==jsonAltFormatReports[j]) altFormat = true;
    }
    return altFormat;
}

function showGetReport(respId){
    deactivateOtherReports();
    deactivateOtherDetails();

    var offset = findReport(respId);
    var altFormat = chkReportFormat(jsonReportObj[offset].testId);
//    var formObj = document.frmPayParams;
    var objLink = document.getElementById('linkReport'+respId);
    objLink.innerHTML = "<a href=\"javascript:hideReport("+respId+")\" class='contentLinks'>cancel</a>";

    if (altFormat) {
        var htmlViewReport = '&nbsp;';
        var pdfViewReport = "<div style='width: 120px; text-align: center;'><a href=\"javascript:makeReport('View', "+jsonReportObj[offset].reportId+");\" class='link4'>&nbsp;View&nbsp;PDF&nbsp;Report</a></div>";
        var pdfMailReport = "<div style='width: 120px; text-align: center;'><a href=\"javascript:makeReport('Mail', "+jsonReportObj[offset].reportId+");\" class='link4'>Mail&nbsp;PDF&nbsp;Report</a></div>";
    } else {
        var htmlViewReport = (jsonReportObj[offset].testId<100)?"<div style='width: 120px; text-align: center;'><a href=\"javascript:showReport('html', "+jsonReportObj[offset].reportId+" , "+jsonReportObj[offset].testId+" );\" class='link4'>View&nbsp;HTML&nbsp;Report</a></div>":"&nbsp;";
        var pdfViewReport = "<div style='width: 120px; text-align: center;'><a href=\"javascript:showReport('view', "+jsonReportObj[offset].reportId+" , "+jsonReportObj[offset].testId+" );\" class='link4'>&nbsp;View&nbsp;PDF&nbsp;Report</a></div>";
        var pdfMailReport = "<div style='width: 120px; text-align: center;'><a href=\"javascript:showReport('mail', "+jsonReportObj[offset].reportId+" , "+jsonReportObj[offset].testId+" );\" class='link4'>Mail&nbsp;PDF&nbsp;Report</a></div>";
    }

    var objReport = document.getElementById('showReport'+respId);
    newBlock = "\n                  <div class='showEditBlock'>\n"+
"                  <div style='width: 33%; float: left;' class='showEditRow'>"+pdfViewReport+"</div>\n"+
"                  <div style='width: 34%; float: left;' class='showEditRow'>"+htmlViewReport+"</div>\n"+
"                  <div style='width: 33%; float: left;' class='showEditRow'>"+pdfMailReport+"</div>\n"+
"                  </div>\n";

    objReport.innerHTML = newBlock;
}

function altShowGetReport(respId){
    deactivateOtherReports();
    deactivateOtherDetails();

    var offset = findReport(respId);
    var altFormat = chkReportFormat(jsonReportObj[offset].testId);
//    var formObj = document.frmPayParams;
    var objLink = document.getElementById('colLinkResult'+respId);
    objLink.innerHTML = "<a href=\"javascript:altHideReport("+respId+")\" class='contentLinks'>cancel</a>";

    if (altFormat) {
        var htmlViewReport = '&nbsp;';
        var pdfViewReport = "<div style='width: 120px; text-align: center;'><a href=\"javascript:makeReport('View', "+jsonReportObj[offset].reportId+");\" class='link4'>&nbsp;View&nbsp;PDF&nbsp;Report</a></div>";
        var pdfMailReport = "<div style='width: 120px; text-align: center;'><a href=\"javascript:makeReport('Mail', "+jsonReportObj[offset].reportId+");\" class='link4'>Mail&nbsp;PDF&nbsp;Report</a></div>";
    } else {
        var htmlViewReport = (jsonReportObj[offset].testId<100)?"<div style='width: 120px; text-align: center;'><a href=\"javascript:showReport('html', "+jsonReportObj[offset].reportId+" , "+jsonReportObj[offset].testId+" );\" class='link4'>View&nbsp;HTML&nbsp;Report</a></div>":"&nbsp;";
        var pdfViewReport = "<div style='width: 120px; text-align: center;'><a href=\"javascript:showReport('view', "+jsonReportObj[offset].reportId+" , "+jsonReportObj[offset].testId+" );\" class='link4'>&nbsp;View&nbsp;PDF&nbsp;Report</a></div>";
        var pdfMailReport = "<div style='width: 120px; text-align: center;'><a href=\"javascript:showReport('mail', "+jsonReportObj[offset].reportId+" , "+jsonReportObj[offset].testId+" );\" class='link4'>Mail&nbsp;PDF&nbsp;Report</a></div>";
    }

    var objReport = document.getElementById('altShowReport'+respId);
    newBlock = "\n                  <div class='showEditBlock'>\n"+
"                  <div style='width: 33%; float: left;' class='showEditRow'>"+pdfViewReport+"</div>\n"+
"                  <div style='width: 34%; float: left;' class='showEditRow'>"+htmlViewReport+"</div>\n"+
"                  <div style='width: 33%; float: left;' class='showEditRow'>"+pdfMailReport+"</div>\n"+
"                  </div>\n";

    objReport.innerHTML = newBlock;
}

function findRater(raterId){
    var j;
    var offset = -1;
    for (j=0; j<jsonRaterDtlsObj.length; j++){
        if(raterId==jsonRaterDtlsObj[j].raterId) offset=j;
    }
    return offset;
}
/*
function checkRatee(raterId) {

}
*/
function hideRateeDetails(rateeId){
//    var formObj = document.frmPayParams;
//    formObj.testId.value='';

    var objLink = document.getElementById('rateeDetails'+rateeId);
    objLink.innerHTML = "<a href='#' class='contentLinks' onclick='showRateeDetails("+rateeId+")'>details</a>";

    var editBlock = document.getElementById('editOption'+rateeId);
    var objRatee = document.getElementById('showDetails'+rateeId);

    newBlock = "<div class='hideEditBlock'></div>"
    editBlock.className = "hideEditBlock";
    objRatee.innerHTML = newBlock;

    document.getElementById('nameRater'+rateeId).innerHTML = '';
    document.getElementById('linkRater'+rateeId).value = '' ;
    document.getElementById('showRaterLink'+rateeId).className = "hideEditBlock";
}

function deactivateOtherDetails() {
    var j;
    var editObj;
    var myCancel = new RegExp(/hide/);
    for (j=0; j<jsonRaterDtlsObj.length; j++){
        editObj = document.getElementById('rateeDetails'+jsonRaterDtlsObj[j].rateeId);

        if ((editObj!=null) && myCancel.test(editObj.innerHTML))
          hideRateeDetails(jsonRaterDtlsObj[j].rateeId);
    }
}

function showRateeDetails(rateeId){
    deactivateOtherDetails();
    deactivateOtherReports();

//    var formObj = document.frmPayParams;
    var objLink = document.getElementById('rateeDetails'+rateeId);
    objLink.innerHTML = "<a href=\"javascript:hideRateeDetails("+rateeId+")\" class='contentLinks'>hide</a>";

    var editBlock = document.getElementById('editOption'+rateeId);

    var objRatee = document.getElementById('showDetails'+rateeId);
    newBlock = "\n                  <div class='showEditBlock' style='text-align: left;'>\n"+
"                  <div style='width: 18%; float: left; padding-left: 3px;' class='showEditRowHead'>Rater Name</div>\n"+
"                  <div style='width: 28%; float: left;' class='showEditRowHead'>Rater Email</div>\n"+
"                  <div style='width: 18%; float: left;' class='showEditRowHead'>Actions</div>\n"+
"                  <div style='width: 18%; float: left;' class='showEditRowHead'>Rater Role (Date)</div>\n"+
"                  <div style='width: 16%; float: left;' class='showEditRowHead'>&nbsp;</div>\n"+
"                  </div>\n";

    for (j=0; j<jsonRaterDtlsObj.length; j++){
        if (rateeId==jsonRaterDtlsObj[j].rateeId){
//            var raterResp = (jsonRaterDtlsObj[j].raterRespId==0)?'Pending':jsonRaterDtlsObj[j].raterType+'<BR>\n('+jsonRaterDtlsObj[j].raterRespDatestamp+')';
            var raterResp = (jsonRaterDtlsObj[j].raterRespId==0)?jsonRaterDtlsObj[j].raterType:jsonRaterDtlsObj[j].raterType+'<BR>\n('+jsonRaterDtlsObj[j].raterRespDatestamp+')';
            var raterAction = (jsonRaterDtlsObj[j].raterRespId!=0)?'n.a.':'<a href="javascript:showRaterLink('+jsonRaterDtlsObj[j].raterId+');">Get Link</a>';
            newBlock += "\n                  <div>\n"+
"                  <div style='width: 18%; float: left; padding-left: 5px;' class='showEditRow'>"+jsonRaterDtlsObj[j].raterName+"</div>\n"+
"                  <div style='width: 28%; float: left;' class='showEditRow'>"+jsonRaterDtlsObj[j].raterMail+"</div>\n"+
"                  <div style='width: 18%; float: left; line-height: 16px;' class='showEditRow'>"+raterAction+"</div>\n"+
"                  <div style='width: 18%; float: left;' class='showEditRow'>"+raterResp+"</div>\n"+
"                  <div style='width: 16%; float: left;' class='showEditRow'>&nbsp;</div>\n"+
"                  </div>\n";

        }
    }

    editBlock.className = "showEditBlock";
    objRatee.innerHTML = newBlock;

//    if (jsonPayParamsObj[offset].paidStatus=='paid') formObj.paidStatus.checked=true;

//    formObj.testId.value=test;
//    formObj.prodCode.focus();
}

function actEdit(e) {
    var o = findRater(e.value)
    if (jsonRaterDtlsObj[o].editables.length) {
        for (j=0; j<jsonRaterDtlsObj[o].editables.length; j++){
            var eleEdit = jsonRaterDtlsObj[o].editables[j]+e.value;
            switch (jsonRaterDtlsObj[o].editables[j]) {
                case 'raterName':
                    if (e.checked) {
                        document.getElementById(eleEdit).innerHTML = "<INPUT TYPE='text' NAME='"+eleEdit+"' VALUE=\""+eval('jsonRaterDtlsObj[o].'+jsonRaterDtlsObj[o].editables[j])+"\" SIZE=20>"
                    }else{
                        document.getElementById(eleEdit).innerHTML = eval('jsonRaterDtlsObj[o].'+jsonRaterDtlsObj[o].editables[j])
                    }
                break;

                case 'raterMail':
                    if (e.checked) {
                        document.getElementById(eleEdit).innerHTML = "<INPUT TYPE='text' NAME='"+eleEdit+"' VALUE='"+eval('jsonRaterDtlsObj[o].'+jsonRaterDtlsObj[o].editables[j])+"' SIZE=30>"
                    }else{
                        document.getElementById(eleEdit).innerHTML = eval('jsonRaterDtlsObj[o].'+jsonRaterDtlsObj[o].editables[j])
                    }
                break;

                case 'raterType':
                    if (e.checked) {
                        var selOptList = "<SELECT NAME='"+eleEdit+"'>";
                        for (k=0; k<jsonRaterTypesObj.length; k++){
                            if (jsonRaterTypesObj[k].typeText !=eval('jsonRaterDtlsObj[o].'+jsonRaterDtlsObj[o].editables[j]) )
                                selOptList += "<OPTION VALUE='"+jsonRaterTypesObj[k].typeValue+"'>"+jsonRaterTypesObj[k].typeText+"</OPTION>";
                            else
                                selOptList += "<OPTION VALUE='"+jsonRaterTypesObj[k].typeValue+"' SELECTED>"+jsonRaterTypesObj[k].typeText+"</OPTION>";
                        }
                        selOptList += "</SELECT>";
                        document.getElementById(eleEdit).innerHTML = selOptList;
                    }else{
                        document.getElementById(eleEdit).innerHTML = eval('jsonRaterDtlsObj[o].'+jsonRaterDtlsObj[o].editables[j])
                    }
                break;

                case 'raterDelete':
                    if (e.checked) {
                        document.getElementById(eleEdit).innerHTML = "<a href='javascript:deleteRater("+jsonRaterDtlsObj[o].raterId+")'>delete Rater</a>";
                    } else {
                        document.getElementById(eleEdit).innerHTML = '&nbsp;';
                    }
                break;
            }

        }
    }
//alert(e.checked)
//alert('for ' + e.value + ' found '+ jsonRaterDtlsObj[o].editables.length + ' item(s) to edit')


}

function deleteRater(id){
//    var o = findRater(id);
    var f = document.frmEditRaters;
//alert(eval("f.raterName"+id+".value"))
    eval("f.raterName"+id+".value=''")
    eval("f.raterName"+id+".disabled="+true)
    eval("f.raterMail"+id+".value=''")
    eval("f.raterMail"+id+".disabled="+true)
}

function showRaterLink(id) {
    var o = findRater(id);
//alert('showRaterLink'+jsonRaterDtlsObj[o].rateeId);
    document.getElementById('showRaterLink'+jsonRaterDtlsObj[o].rateeId).className = 'showEditBlock';
    document.getElementById('nameRater'+jsonRaterDtlsObj[o].rateeId).innerHTML = jsonRaterDtlsObj[o].raterName;
    document.getElementById('linkRater'+jsonRaterDtlsObj[o].rateeId).value = jsonRaterDtlsObj[o].raterLink
}

function changeCalButton(s){
//'Extend...'
    document.getElementById('f-calendar-trigger-1').innerHTML = s;
}

function takeTest(a, v) {
    var f = eval('document.frm'+a);

    f.act.value=a.toLowerCase();
    f.test.value=v;

    f.submit();
}

/*---------------------------------------------------------------------------*/
function renderNodes(nodeName, jsonBlockData) {
//    if (xxx === undefined) xxx = '';

    eval('var pNode  = jsonBlockData.'+nodeName);

    if (pNode.children!=null) {
        var childNodes = pNode.children;
        for (j=0; j<childNodes.length; j++) {
            eval('var childNode = jsonBlockData.'+childNodes[j]);
            eval('var '+ childNodes[j] +'= document.createElement("'+childNode.nodeType+'")');
//alert(childNodes[j]);
            setAttribs(eval(childNodes[j]), childNode);

            // if childNode uses 'assignValue'
            if (childNode.assignValue!=null) eval(childNodes[j]+".value = '"+eval(childNode.assignValue)+"'");

            document.getElementById(childNode.parentId).appendChild(eval(childNodes[j]));

            // Now, make the components here!
            if (childNode.components!=null) {
                var components = childNode.components;

                for (compId=0; compId<components.length; compId++) {

                    eval('var componentNode = jsonBlockData.'+components[compId]);
                    eval('var '+components[compId]+'= document.createElement("'+componentNode.nodeType+'")')

                    setAttribs(eval(components[compId]), componentNode);

                    if (componentNode.nodeType=='select') makeOptList(eval(components[compId]), jsonBlockData);;

                    // if componentNode uses 'assignValue'
                    if ( eval(componentNode.assignValue) !== undefined) {
                        if(componentNode.type=='hidden'){
                           eval(components[compId]+".value = '"+escape(eval(componentNode.assignValue))+"'");
                        } else {
                           eval(components[compId]+".value = '"+eval(componentNode.assignValue)+"'");
                        }
                    }
                    // append the childNode now!
                    document.getElementById(componentNode.parentId).appendChild(eval(components[compId]));
                }
            } // endIf components
        }
    } // endIf childNodes
} // EF
/*---------------------------------------------------------------------------*/
function setAttribs(ele, datObj, reqSuffix, suffix) {
    if (reqSuffix === undefined) reqSuffix = false;
    if (suffix === undefined) suffix = 0;

    // if any of the attribute values are to be 'numerated', do it now!
    check4Numerated(datObj);

    var attribs = Array('name', 'id', 'CLASS', 'action', 'type', 'value', 'cols', 'rows', 'size', 'src',
                        'cellpadding', 'cellspacing', 'width', 'align', 'colspan', 'rowspan',
                        'method', 'enctype',
                        'STYLE',
                        'href', 'onchange', 'onclick',
                        'maxLength',
                        'disabled', 'checked', 'selected',
                        'innerHTML') ;

    for (k=0; k<attribs.length; k++) {
         if (eval('datObj.'+attribs[k]+' != null')) {
            if (attribs[k]=='innerHTML') ele.innerHTML = eval('datObj.'+attribs[k]);
            else if (attribs[k]=='CLASS') ele.setAttribute('class', eval('datObj.'+attribs[k]));
            else {
                if (!reqSuffix) ele.setAttribute(attribs[k], eval('datObj.'+attribs[k]));
                else {
                    switch(attribs[k]) {
                        case 'id':
                        case 'name':
                            ele.setAttribute(attribs[k], eval('datObj.'+attribs[k])+suffix)
                        break;

                        default:
                            ele.setAttribute(attribs[k], eval('datObj.'+attribs[k]));
                    }
                }
            }
        }
    }
} // EF
/*---------------------------------------------------------------------------*/
function makeOptList(selectBox, dataObj) {

    var selectNodeId = selectBox.id;
/*
    if (eval("dataObj."+selectNodeId+" === undefined && (formAssignData.OrigSelectId!=null)")) {
        selectNodeId = formAssignData.OrigSelectId;
        formAssignData.OrigSelectId = null;
    }
*/
    var optionList = eval("dataObj."+selectNodeId+".options");
    var optionType = eval("dataObj."+selectNodeId+".optionType");
    var optionListStart = eval("dataObj."+selectNodeId+".optionListStart");

    if (optionType==null) optionType = 'default';
    var requireListStart = (optionListStart==null)?false:true;

    if (requireListStart) {
            var arrayOptionValText = optionListStart.split("\|");
            addOption(selectBox, arrayOptionValText[0], arrayOptionValText[1]);
    }
    if (optionList!=null) for (optId=0; optId<optionList.length; optId++) {
        switch (optionType) {
            case 'text|value':
                var arrayOptionValText = optionList[optId].split("\|");
                addOption(selectBox, arrayOptionValText[0], arrayOptionValText[1]);
            break;

            case 'default':
                addOption(selectBox, optionList[optId], optionList[optId]);
            break;
        }
    }
} // EF
/*---------------------------------------------------------------------------*/
function check4Numerated(dataObj) {
    if (dataObj.isNumerated!=null)  {
        var numeratedNodes = dataObj.isNumerated;
        for(nIdx=0; nIdx<numeratedNodes.length; nIdx++) {
            var arrayNumedVarVal = numeratedNodes[nIdx].split("\|");

            // Init the value to '0', if it is not already set
            if (eval('formAssignData.'+arrayNumedVarVal[1]) === undefined)
                eval('formAssignData.'+arrayNumedVarVal[1]+' = 0');

            var dataVarVal = eval('formAssignData.'+arrayNumedVarVal[1]);

            // since the dataObj varName is modified with every addition! The pattern used assumes that the varName does not have any numberals!
            var patternOrigVar = /\D+/;
            eval('dataObj.'+arrayNumedVarVal[0]+' = patternOrigVar.exec(dataObj.'+arrayNumedVarVal[0]+')');

            if (arrayNumedVarVal[0]=='id' && dataObj.nodeType=='select') {
                formAssignData.OrigSelectId = eval('dataObj.'+arrayNumedVarVal[0])
            }

            // finally, set the new 'to be used' value
            eval('dataObj.'+arrayNumedVarVal[0]+' = dataObj.'+arrayNumedVarVal[0]+'+'+dataVarVal);
        }
    }
} // EF
/*---------------------------------------------------------------------------*/
