//var statTmpl = Ext.DomHelper.createTemplate(
//{tag:'div', children:[
//    {tag:'div', cls:'StatSection',
//        children:[
//            {tag:'div', cls:'StatControl',
//                children:[{tag:'input', type:'checkbox'},
//                    {tag:'span', html:' Display on my public profile'}]},
//            {tag:'div', cls:'QuestionText', html:'{QuestionText}'},
//            {tag:'div', cls:'StatImageSection',
//                children:[{tag:'img', border:0, src:'ext-2.0/resources/images/default/shared/blue-loading.gif', align: 'center'}]}
//        ]
//    },{tag:'br'}]});

var brTmpl = Ext.DomHelper.createTemplate({tag:'br'});
brTmpl.compile();

var checkboxTmpl = Ext.DomHelper.createTemplate(
    {tag:'div', cls:'CheckBoxControl', children:[
        {tag:'input', type: 'checkbox'},
        {tag:'span', cls:'CheckBoxMsg', html:' {CheckBoxMsg} '},
        {tag:'img', cls:'CheckLoadingImg x-hidden', src: (queryParams['pathPrefix'] ? queryParams['pathPrefix'] : '') + 'ext-2.0/resources/images/default/tree/loading.gif'},
        {tag:'img', cls:'CheckSuccessImg x-hidden', src: (queryParams['pathPrefix'] ? queryParams['pathPrefix'] : '') + 'ext-2.0/resources/images/default/tree/drop-yes.gif'},
        {tag:'img', cls:'CheckFailureImg x-hidden', src: (queryParams['pathPrefix'] ? queryParams['pathPrefix'] : '') + 'ext-2.0/resources/images/default/tree/drop-no.gif'},
        {tag:'span', cls:'CheckLoadingMsg x-hidden', html:'Updating settings...'},
        {tag:'span', cls:'CheckSuccessMsg x-hidden', html:'Successfully updated. <a href="http://www.qualityservice.org/search.aspx?memberid={EntityID}">View changes.</a>'},
        {tag:'span', cls:'CheckFailureMsg x-hidden', html:'Failed to update. Try again.'}
        ]});
checkboxTmpl.compile();

var statTmpl = Ext.DomHelper.createTemplate(
{tag:'table', cls:'StatBorder', cellspacing:0, cellpadding:0,
    children:[{tag:'tbody', children:[
        {tag:'tr', children:[
	        {tag:'td', cls:'StatBorderTopLeft'},
	        {tag:'td', cls:'StatBorderTop'},
	        {tag:'td', cls:'StatBorderTopRight'}
	    ]},
        {tag:'tr', children:[
	        {tag:'td', cls:'StatTitleLeft'},
            {tag:'td', cls:'StatTitle', html:'{QuestionText}'},
            {tag:'td', cls:'StatTitleRight'}
        ]},
        {tag:'tr', children:[
            {tag:'td', cls:'StatBodyLeft'},
            {tag:'td', cls:'StatBody', children:[{tag:'img', border:0, cls:'StatImg', src: (queryParams['pathPrefix'] ? queryParams['pathPrefix'] : '') + 'ext-2.0/resources/images/default/shared/blue-loading.gif', align: 'center'}]},
            {tag:'td', cls:'StatBodyRight'}
        ]},
        {tag:'tr', children:[
            {tag:'td', cls:'StatBorderBottomLeft'},
            {tag:'td', cls:'StatBorderBottom'},
            {tag:'td', cls:'StatBorderBottomRight'}
        ]}
    ]}]
});
statTmpl.compile();


var commentRowTemplate = Ext.DomHelper.createTemplate({
    tag:'tr', cls:'CommentRow',
    children:[{tag:'td', cls:'CommentCell', colspan:'{TotalOptionColSpan}',
        align:'center'}]}
);
commentRowTemplate.compile();

var commentImageTemplate = Ext.DomHelper.createTemplate(
    {tag:'div', children:[
		{tag:'img', cls:'CommentImg', border:'0',
        src: (queryParams['pathPrefix'] ? queryParams['pathPrefix'] : '') + 'comment.qcimg?s=0&id={TransactionID}',
        alt:'Consumer Comment'}]});
commentImageTemplate.compile();

var commentTextTemplate = Ext.DomHelper.createTemplate(
    {tag:'div', cls:'CommentText'});
commentTextTemplate.compile();

var commentLinkTemplate = Ext.DomHelper.createTemplate(
    {tag:'a', cls:'CommentImgLink',
        href:'javascript:void(0);', onclick:'return false;'});
commentLinkTemplate.compile();


var dataBuyer;
var nestedDataBuyer;

var dataSeller;
var nestedDataSeller;

var getRemainingCommentsCallback = function(options, success, response){
    if(success) {
		var data = eval(response.responseText);
		if(data[0]) updateComments(data[0],  options.params.link);
    } else {
        alert('Loading consumer comments failed.');
    }
};

var getRemainingComments = function(){
	
	var req = Ext.Ajax.request(
		{url:(queryParams['pathPrefix'] ? queryParams['pathPrefix'] : '') + "AgentSummaryReportJSON.aspx",
			//method: 'POST',
			disableCaching : true,
			params: {EntityID: queryParams['EntityID'],
			EntityType: queryParams['EntityType'], CommentStart: 4, CommentEnd: 97,
			link: this.link},
		callback: getRemainingCommentsCallback});
}

var commentsFirstPass = true;

var updateComments = function(data, link){
    //var data = eval(response.responseText);
    //alert('eval done');
    holder = Ext.get('consumerComments');
    var linky;
    if(commentsFirstPass){
		if(data.length > 1 && data[1] != null){
			var hasAccess = data[1][data[0].HasAccess];
			var entityID = data[1][data[0].EntityID];
			var entityType = data[1][data[0].EntityType];
			
			holder.removeClass('x-hidden');
			Ext.select('.CommentLabel').removeClass('x-hidden');
			Ext.select('.CommentLink').removeClass('x-hidden');
			if(hasAccess){
				//Ext.get('statsInstructions').removeClass('x-hidden');
				var checkboxControl = checkboxTmpl.append(holder, {EntityID: data[1][data[0].EntityID], CheckBoxMsg: 'Publish consumer comments on <a href="http://www.qualityservice.org/search.aspx?memberid=' + data[1][data[0].EntityID] + '">QualityService.org</a>.'}, true);
				var checkbox = checkboxControl.child('input');
				if(data[1][data[0].IsPublic]) checkbox.set({checked:'checked'});
				var toggleParams = {checkbox:checkbox,
					checkboxControl: checkboxControl,
					entityID: data[1][data[0].EntityID],
					entityType: data[1][data[0].EntityType],
					surveyID: data[1][data[0].SurveyID]}
				if(Ext.isIE){
					checkbox.on('click', toggleCommentsPublic, toggleParams);
				} else {
					checkbox.on('change', toggleCommentsPublic, toggleParams);
				}
			}
			var commentBorder = statTmpl.append(holder,
            {QuestionText:'Consumer Comments'},
            true);
			var commentBorderBody = commentBorder.child('.StatBody');
			var commentBorderBodyImg = commentBorderBody.child('img');
			commentBorderBodyImg.remove();
			commentBorderBodyImg = null;
			var cTmpl = Ext.DomHelper.createTemplate({tag:'div', cls:'AllCommentsControl',
            style:'text-align: right;', children: [
                {tag:'a', href:'javascript:void(0);', html:'Read All Consumer Comments >>'}]});
            linky = cTmpl.append(commentBorderBody, {}, true);
			linky.on('click', getRemainingComments, {link: linky, EntityID: entityID, EntityType: entityType});
		}	
	} else {
		linky = link;
	}
    
    for(var i = 1; i < data.length; i++){
        if(data[i][data[0].HasCommentImage]){
            commentImageTemplate.insertBefore(linky,
                {TransactionID:data[i][data[0].TransactionID]});
        } else if(data[i][data[0].CommentText]){
            commentTextTemplate.insertBefore(linky,
                {}, true).update(data[i][data[0].CommentText]);
        }
    }
    
    if(!commentsFirstPass && data.length < 2){
		var msgTmpl = Ext.DomHelper.createTemplate(
			{tag:'span', html:'No additional comments at this time.'})
		msgTmpl.insertBefore(linky,{});
    }
    if(linky && data.length < 4) linky.remove();
    if(!commentsFirstPass) linky.remove();;
    
    commentsFirstPass = false;
}

var commentCallback = function(options, success, response){
    if(success) {
        updateComments(options, response);
    } else {
        alert('Loading consumer comments failed.');
    }
};

var togglePublicCallback = function(options, success, response){
    var checkLoadingImg = options.params.checkboxControl.child('.CheckLoadingImg');
    checkLoadingImg.addClass('x-hidden');
    var checkLoadingMsg = options.params.checkboxControl.child('.CheckLoadingMsg');
    checkLoadingMsg.addClass('x-hidden');
    
    if(success) {
        var checkSuccessImg = options.params.checkboxControl.child('.CheckSuccessImg');
        checkSuccessImg.removeClass('x-hidden');
        var checkSuccessMsg = options.params.checkboxControl.child('.CheckSuccessMsg');
        checkSuccessMsg.removeClass('x-hidden');
    } else {
        var checkFailureImg = options.params.checkboxControl.child('.CheckFailureImg');
        checkFailureImg.removeClass('x-hidden');
        var checkFailureMsg = options.params.checkboxControl.child('.CheckFailureMsg');
        checkFailureMsg.removeClass('x-hidden');
    }
}

var toggleFeedback = function(checkboxControl){
    var checkFailureImg = checkboxControl.child('.CheckFailureImg');
    checkFailureImg.addClass('x-hidden');
    var checkFailureMsg = checkboxControl.child('.CheckFailureMsg');
    checkFailureMsg.addClass('x-hidden');
    
    var checkSuccessImg = checkboxControl.child('.CheckSuccessImg');
    checkSuccessImg.addClass('x-hidden');
    var checkSuccessMsg = checkboxControl.child('.CheckSuccessMsg');
    checkSuccessMsg.addClass('x-hidden');
    
    var checkLoadingImg = checkboxControl.child('.CheckLoadingImg');
    checkLoadingImg.removeClass('x-hidden');
    var checkLoadingMsg = checkboxControl.child('.CheckLoadingMsg');
    checkLoadingMsg.removeClass('x-hidden');
}

var toggleCommentsPublic = function(){
    toggleFeedback(this.checkboxControl);
    var buyer = Ext.Ajax.request(
        {url:(queryParams['pathPrefix'] ? queryParams['pathPrefix'] : '') + "SetEntityPublicCommentsJSON.aspx",
			//method: 'POST',
			disableCaching : true,
			params: {SurveyGroupID: memberSurveyGroupID,
            EntityID: this.entityID, EntityType: this.entityType,
            checkboxControl: this.checkboxControl,
            ActionType: (this.checkbox.dom.checked ? 'insert' : 'delete')},
            callback: togglePublicCallback});
}

var toggleQuestionPublic = function(){
    toggleFeedback(this.checkboxControl);
    var buyer = Ext.Ajax.request(
        {url:(queryParams['pathPrefix'] ? queryParams['pathPrefix'] : '') + "SetEntityPublicQuestionJSON.aspx",
			//method: 'POST',
			disableCaching : true,
			params: {SurveyGroupID: memberSurveyGroupID,
            EntityID: this.entityID, EntityType: this.entityType, QuestionID: this.questionID, SurveyID: this.surveyID,
            checkboxControl: this.checkboxControl,
            ActionType: (this.checkbox.dom.checked ? 'insert' : 'delete')},
            callback: togglePublicCallback});
}



var updateStats = function(nested, data, holder){
    var currentStat;
    var hasAccess = false;
    if(nested[0].QuestionOptions &&
            nested[0].QuestionOptions[0] &&
            nested[0].QuestionOptions[0][data[1][0].HasAccess]) hasAccess = true;
    for(var i = 0; i < nested.length; i++){
        if(hasAccess){
            //Ext.get('statsInstructions').removeClass('x-hidden');
            var checkboxControl = checkboxTmpl.append(holder, {EntityID: nested[i].QuestionOptions[0][data[1][0].EntityID], CheckBoxMsg: 'Publish this survey data on <a href="http://www.qualityservice.org/search.aspx?memberid=' + nested[i].QuestionOptions[0][data[1][0].EntityID] + '">QualityService.org</a>.'}, true);
            var checkbox = checkboxControl.child('input');
            if(nested[i].QuestionOptions[0][data[1][0].IsPublic]) checkbox.set({checked:'checked'});
            var toggleParams = {checkbox:checkbox,
                checkboxControl: checkboxControl,
                entityID: nested[i].QuestionOptions[0][data[1][0].EntityID],
                entityType: nested[i].QuestionOptions[0][data[1][0].EntityType],
                questionID: nested[i].QuestionOptions[0][data[1][0].QuestionID],
                surveyID: nested[i].QuestionOptions[0][data[1][0].SurveyID]}
            if(Ext.isIE){
                checkbox.on('click', toggleQuestionPublic, toggleParams);
            } else {
                checkbox.on('change', toggleQuestionPublic, toggleParams);
            }
        }
        currentStat = statTmpl.append(holder,
            {QuestionText:(hasAccess ? (i + 1) + '. ' : '') + nested[i].QuestionOptions[0][data[1][0].QuestionText]},
            true);
        brTmpl.append(holder, {}, false);
        //brTmpl.append(holder, {}, false);
        var chartImg = currentStat.child('img');
        nested[i].imgEl = chartImg;
        
        //Legends=Very%20Satisfied,Satisfied,Neutral,Dissatisfied,Very%20Dissatisfied&Vals=14,1,0,0,0&
        //chartImg.set({src: chartURL + '&chd=t:' + statNumbers.join(',') +
        //    '&chl=' + statLabels.join('|')});
        nested[i].imgEl.set({src: nested[i].chartURL + '&Legends=' + nested[i].statLabels.join(',') +
            '&Vals=' + nested[i].statNumbers.join(',') + '&Expload=' + nested[i].statExplode.join(',')});
    }
}
    

var summaryCallback = function(options, success, response){
    if(success) {
        updateStats(options, response);
    } else {
        alert('Loading statistics failed.');
    }
};

var memberSurveyGroupID;

var renderTemplate = function(options, response){
    var data;
    var nestedData;
    data = eval(response.responseText);
    if(data && data[0] && data[0][1]){
		memberSurveyGroupID = data[0][1][data[0][0].SurveyGroupID]
		nestedData = [];
		var questionID = -1;
		var surveyID = -1;
		var sPos;
		var qPos;
		for(var i = 1; i < data[1].length; i++){
			if(surveyID != data[1][i][data[1][0].SurveyID]){
				surveyID = data[1][i][data[1][0].SurveyID];
				sPos = nestedData.length;
				nestedData[sPos] = [];
			}
			if(questionID != data[1][i][data[1][0].QuestionID]){
				questionID = data[1][i][data[1][0].QuestionID];
				qPos = nestedData[sPos].length;
				nestedData[sPos][qPos] = {QuestionID:questionID, QuestionOptions:[]};
			}
			nestedData[sPos][qPos].QuestionOptions[nestedData[sPos][qPos].QuestionOptions.length] = data[1][i];
		}
		var currentStat;
		//var chartURL = 'http://chart.apis.google.com/chart?cht=p3&chs=480x100';
		var chartURL = (queryParams['pathPrefix'] ? queryParams['pathPrefix'] : '') + 'pieChartServer.aspx?imgFormat=3';
		//chd=t:15.0,10.0,10.0,10.0&chl=January|February|March|April
		var statNumbers, statLabels, statExplode;
		for(var i = 0; i < nestedData.length; i++){
			if(nestedData[i][0] &&
				nestedData[i][0].QuestionOptions &&
				nestedData[i][0].QuestionOptions[0]){
				for(var j = 0; j < nestedData[i].length; j++){
					statNumbers = [];
					statLabels = [];
					statExplode = [];
					for(var k = 0; k < nestedData[i][j].QuestionOptions.length; k++){
						statNumbers[k] = nestedData[i][j].QuestionOptions[k][data[1][0].QuestionOptionAnsweredCount];
						statLabels[k] = nestedData[i][j].QuestionOptions[k][data[1][0].OptionText];
						statExplode[k] = "True";
					}
					nestedData[i][j].chartURL = chartURL;
					nestedData[i][j].statLabels = statLabels;
					nestedData[i][j].statExplode = statExplode;
					nestedData[i][j].statNumbers = statNumbers;
				}
			}
		}
		//alert(memberSurveyGroupID);
		for(var i = 0; i < nestedData.length; i++){
			var holder;
			var surveyID = nestedData[i][0].QuestionOptions[0][data[1][0].SurveyID]
			if((memberSurveyGroupID == 3 && surveyID == 3) || (memberSurveyGroupID == 5 && surveyID == 19)) {
				holder = Ext.get('statsBuyer');
				holder.removeClass('x-hidden');
				Ext.select('.BuyerLabel').removeClass('x-hidden');
				Ext.select('.BuyerLink').removeClass('x-hidden');
				updateStats(nestedData[i], data, holder);
			} else if(memberSurveyGroupID == 3 && surveyID == 4) {
				holder = Ext.get('statsSeller');
				holder.removeClass('x-hidden');
				Ext.select('.SellerLabel').removeClass('x-hidden');
				Ext.select('.SellerLink').removeClass('x-hidden');
				updateStats(nestedData[i], data, holder);
			}
			//alert(nestedData[i].length);
			//if((memberSurveyGroupID == 3 && (surveyID == 19) || (memberSurveyGroupID == 5 && surveyID == 19)){
				//updateStats(nestedData[i], data, holder);
			//}
		}
		if(data[2]) updateComments(data[2]);
	}
	//    var stats = Ext.Ajax.request(
	//        {url:"SummaryReport.aspx", params: {SurveyId: options.params.surveyId,
	//            EntityID: queryParams['EntityID'],
	//            EntityType: queryParams['EntityType'],
	//            EntityList: queryParams['EntityID'] + ':' + queryParams['EntityType'],
	//            EntityLevels: queryParams['EntityID'] + ':' + queryParams['EntityType'] +
	//                ',-1:' + queryParams['EntityType'],
	//            SurveyGroupID: 3},
	//        callback: summaryCallback});
	//        if(options.params.SurveyId == 3) {
	//    var seller = Ext.Ajax.request(
	//        {url:"QuestionOptionJSON.aspx", params: {surveyId: 4},
	//        callback: templateCallback});
	//    } else {
	//        var buyer = Ext.Ajax.request(
	//            {url:"TransactionListJSON.aspx", params: {SurveyGroupID: 3,
	//            EntityID: 45, EntityType: 'member', HasComment: 1},
	//            callback: commentCallback});
	//    }
}


var templateCallback = function(options, success, response){
    if(success) {
        renderTemplate(options, response);
    } else {
        alert('Loading survey template failed.');
    }
};

var getSurveyTemplate = function() {
	var bodyTable = Ext.get('BodyTable');
	if(bodyTable){
		var bodyTR = bodyTable.child('tr');
		var bodyTD = bodyTR.last('td');
		bodyTD.setStyle({background: 'transparent'});
	}
	//.prev('td');
	//bodyTD.set({width: 600});
	var statsButtonLink = Ext.get('statsButtonLink');
	if(statsButtonLink) statsButtonLink.addClass('x-hidden');
    var buyer = Ext.Ajax.request(
        {url:(queryParams['pathPrefix'] ? queryParams['pathPrefix'] : '') + "AgentSummaryReportJSON.aspx",
			//method: 'POST',
			disableCaching : true,
			params: {EntityID: queryParams['EntityID'],
            EntityType: queryParams['EntityType']},
        callback: templateCallback});
    
}

Ext.onReady(getSurveyTemplate);

