(function(){
GupShup.html.premiumPlan = {};
GupShup.html.premiumPlan.vars = {
entityId : -1,
type : 'PREMIUM_ENTITY_PLAN',
planContainer : 'premiumPlanPopUp',
premiumJoinContainer : 'premiumJoinPopUp',
planCostContainer : 'premiumPlanCosts_',
premiumJoinStatus : null
};

GupShup.html.premiumPlan.methods = {

getButtonName : function(allowTrial,details){
	if(details.hasLeft == true)
		return "Pay & Join";
	else if(allowTrial == true)
		return "Get Trial";
	else
		return "Pay & Join";
},

getHeader : function(allowTrial, details){
	if(allowTrial == true || details.hasLeft == true)
		return "Join";
	else
		return "Renew";
},

onSuccess : function(xhr){
var planDetails = GupShup.util.getJsonFromResponse(xhr.responseText);
 
 if(planDetails.status == "SUCCESS")
 {
 
  planDetails.argument = xhr.argument;
  
  if(planDetails.errorCode == "NO_ERROR" && planDetails.entityPlan.length > 0)
	GupShup.html.premiumPlan.methods.showPlanPopUp(planDetails);
  else
	GupShup.forms.showNotification(planDetails.message, {failure:true});
 }
 else
	GupShup.forms.showNotification(planDetails.message, {failure:true});
},

closePlanPopUp : function(){
GupShup.html.util.hideElement(GupShup.html.premiumPlan.vars.planContainer);
},

getTemplate : function(id){
var retStr = '<tr>' + document.getElementById(id).rows[0].innerHTML + '</tr>';
return retStr;
},

showPlanPopUp : function(planDetails){
	var plans = planDetails.entityPlan;
	var entity = planDetails.entityDetails;
	var argument = planDetails.argument;
	
	var planDetailsHtml =  GupShup.util.expandTemplate(GupShup.html.premiumPlan.methods.getTemplate('premiumPlanTemplate'),GupShup.html.premiumPlan.maps.premiumPlanTemplate,plans);
	
	var html = '<table><tbody>' + planDetailsHtml + '</tbody></table>';
	
	var container = GupShup.html.util.createElement('DIV',GupShup.html.premiumPlan.vars.planContainer);
	GupShup.html.util.setClass(container,"absPopUp");
	
	var dataObj = [{
					planInfo:html,
					name:entity.name,
					entityId:entity.id,
					allowTrial:argument.allowTrial,
					hasLeft:argument.hasLeft 
				}];
			
	GupShup.util.expandTemplateInDiv(GupShup.html.premiumPlan.vars.planContainer,'premiumPlanSelectionTemplate', GupShup.html.premiumPlan.maps.premiumPlanSelectionTemplate, dataObj);
	
	GupShup.html.util.overlay(document.getElementById('renew_' + entity.id),container, "top right", 0,0);
},

onFailure : function(o){
},

getPremiumPlan : function(entity_Id,allow_Trial,has_Left){
	var getTrial = false;
	GupShup.forms.hideNotification();

	if(typeof allow_Trial == "boolean")
		getTrial = allow_Trial;
		
	var queryUrl = GupShup.conf.readUrl + "&type=" + GupShup.html.premiumPlan.vars.type + "&entityId=" + entity_Id + "&needTotalForPg=false";
	var callBack = {
		success: GupShup.html.premiumPlan.methods.onSuccess,
		failure: GupShup.html.premiumPlan.methods.onFailure,
		argument: {
			entityId: entity_Id,
			allowTrial: getTrial,
			hasLeft:has_Left
		}
	};
	GupShup.html.premiumPlan.vars.entityId = entity_Id;
	GupShup.ajax.send('POST', queryUrl , callBack, 'USER_INTIATED_READ');
},

checkUserAccountBalance : function(allowTrial,hasLeft){
	if(allowTrial && (hasLeft != true))
	{
		var renewForm = 'renewSubscriptionOf_' + GupShup.html.premiumPlan.vars.entityId;
		GupShup.html.premiumPlan.methods.selectPremiumPlan();
		GupShup.html.actions.requestSubscription(renewForm);
		return;
	}	
	var callBack = {
			success: GupShup.html.premiumPlan.methods.renewUserPremiumSubscription,
			failure: GupShup.html.premiumPlan.methods.onFailure
		};
	
	GupShup.html.actions.requestAccountBalance(callBack);
},

selectPremiumPlan : function(){
	var plansForm = GupShup.html.premiumPlan.vars.planCostContainer + GupShup.html.premiumPlan.vars.entityId;
	var renewForm = 'renewSubscriptionOf_' + GupShup.html.premiumPlan.vars.entityId;
	var joinCost = -1;
	var joinCostArr = document.forms[plansForm].planId;
	var selectedPlan = -1;
	
	for(var i = 0 ; i < joinCostArr.length ; i++)
		if(joinCostArr[i].checked)
			selectedPlan = joinCostArr[i].value;
	
	if(selectedPlan == -1)
	{
		selectedPlan = joinCostArr.value;
	}
	
	var costHolderName = "cost_" + selectedPlan;
	var planFormEle = document.forms[plansForm];
	joinCost = planFormEle[costHolderName].value;
	document.forms[renewForm].plan.value = selectedPlan;
	document.forms[renewForm].isRenew.value = "true";
	return joinCost; 
},

renewUserPremiumSubscription: function(xhr){
	var acctDetails = GupShup.util.getJsonFromResponse(xhr.responseText);
	var renewForm = 'renewSubscriptionOf_' + GupShup.html.premiumPlan.vars.entityId;
	var joinCost = GupShup.html.premiumPlan.methods.selectPremiumPlan();
		
	if(acctDetails.status == "SUCCESS")
	{
		if(acctDetails.errorCode == "NO_ERROR")
		{
			var bal = acctDetails.info[0].actualBalance;
			if(parseFloat(bal) >= parseFloat(joinCost))
			{
				GupShup.html.actions.renewSubscription(renewForm);
				GupShup.html.premiumPlan.methods.closePlanPopUp();
			}
			else
			{
				if(joinCost < GupShup.conf.minimumPay) //Minimum default amount for refill.
					joinCost = GupShup.conf.minimumPay;
					
				GupShup.html.actions.forwardToPaymentSystem(joinCost,GupShup.conf.phoneNumber,GupShup.conf.fromUrl + "/manageSubscriptions");
			}
		}
		else
		{		
			if(acctDetails.errorCode == "INVALID_PARAM")
				GupShup.forms.showNotification(GupShup.html.errorMessages.sessionExpired, {failure:true});
			else
				GupShup.forms.showNotification(GupShup.html.errorMessages.paySysDownError, {failure:true});
		}
	}
	else
	{
		if(acctDetails.errorCode == "INVALID_PARAM")
			GupShup.forms.showNotification(GupShup.html.errorMessages.sessionExpired, {failure:true});
		else	
			GupShup.forms.showNotification(GupShup.html.errorMessages.paySysDownError, {failure:true});
	}
},

defaultPlanDataGenerator : function(plan){
 	if(plan.isDefault)
 		return [{isDefault:"checked"}];
 	else
 		return [{}];		
},

premiumGroupStatusStringGenerator : function(status){
	if(status == "TRIAL" || status == "NOTIFICATION")
		return "Trial";
	else if(status == "BLOCKED" || status == "DEFAULTER")
		return "Inactive";
	else return "Active";
},

premiumGroupStatusTemplateGenerator : function(subDetails){
	if(typeof subDetails.premiumSubscriptionDetails == "undefined")
		return 2;
	else if(subDetails.isPremium && subDetails.premiumSubscriptionDetails.tobeRenewed)
		return 0;
	else if(subDetails.isPremium && !subDetails.premiumSubscriptionDetails.tobeRenewed)
		return 1;
	else
		return 2;
},

processSubscribeResp : function(xhr){
	GupShup.html.premiumPlan.vars.premiumJoinStatus = null;
	var status = GupShup.util.getJsonFromResponse(xhr.responseText);
	
	switch(status.status)
	{
		case 'SUCCESS':
		{
			switch(status.errorCode)
			{
				case 'SUCCESS': 
				case 'NO_ERROR':
				case 'TRIAL':
				case 'JOIN': GupShup.html.premiumPlan.vars.premiumJoinStatus = status; 
							 GupShup.html.premiumPlan.methods.showPremiumJoinPopUp(); 
							 break;
			}
		}
		break;
		case 'FAILURE' :
		{
			GupShup.forms.showNotification(status.message,{failure:true});
		}
	}
},

closePremiumJoinPopUp : function(){
	GupShup.html.util.hideElement(GupShup.html.premiumPlan.vars.premiumJoinContainer);
	var status = GupShup.html.premiumPlan.vars.premiumJoinStatus;
	GupShup.util.postData(GupShup.conf.contextPath + '/subscribedGroupMessages?entityName=' + status.entityDetails.orgName,'status','joined','message',status.message);
},

showPremiumJoinPopUp : function(){
	var status = GupShup.html.premiumPlan.vars.premiumJoinStatus;
	
	var container = GupShup.html.util.createElement('DIV',GupShup.html.premiumPlan.vars.premiumJoinContainer);
	GupShup.html.util.setClass(container,"absPopUp");
	
	var dataObj = [{entityDetails:status.entityDetails,accountDetails:status.params.accountDetails}];
	
	GupShup.util.expandTemplateInDiv(GupShup.html.premiumPlan.vars.premiumJoinContainer,'premiumJoinedTemplate', GupShup.html.premiumPlan.maps.greetingSentTemplateMap, dataObj);
	GupShup.html.util.alignBoxAtCenter(GupShup.html.premiumPlan.vars.premiumJoinContainer);
}

};

GupShup.html.premiumPlan.maps = {};
GupShup.html.premiumPlan.maps.manageSubscriptionActiveMap = [
						{key:'$ENTITY_ID$', dataMember:'id'},
						{key:'$STATUS$', dataMember:'premiumSubscriptionDetails.status', dataProcessor :GupShup.html.premiumPlan.methods.premiumGroupStatusStringGenerator}
					];
GupShup.html.premiumPlan.maps.defaultPlanTemplate = [{key:'$ISDEFAULT$',dataMember:'isDefault'}];	
GupShup.html.premiumPlan.maps.premiumPlanTemplate = [
						{key:'$ENTITY_ID$',dataMember:'entityId'},
						{key:'$DAYS$',dataMember:'billingPeriod'},
						{key:'$PLAN_ID$',dataMember:'id'},
						{key:'$COST$',dataMember:'cost'},
						{	
							key:'$selected$',
							templateMember:
							{
								tmplDivId: 'defaultPlanTemplate',
								tmplMap : GupShup.html.premiumPlan.maps.defaultPlanTemplate,
								templateDataGenerator:GupShup.html.premiumPlan.methods.defaultPlanDataGenerator
							}	
						}
					  ];
GupShup.html.premiumPlan.maps.premiumPlanSelectionTemplate = [
								{key:'$ENTITY_ID$',dataMember:'entityId'},
								{key:'$PREMIUM_PLAN_INFO$',dataMember:'planInfo'},
								{key:'$TYPE$',dataMember: 'allowTrial', dataProcessor:GupShup.html.premiumPlan.methods.getHeader},
								{key:'$ENTITY_NAME$',dataMember:'name'},
								{key:'$ALLOW_TRIAL$',dataMember:'allowTrial'},
								{key:'$HAS_LEFT$',dataMember:'hasLeft'},
								{key:'$BUTTON_NAME$', dataMember: 'allowTrial', dataProcessor:GupShup.html.premiumPlan.methods.getButtonName}
							  ];					  
GupShup.html.premiumPlan.maps.greetingSentTemplateMap = [
								{key:'$ENTITY_NAME$', dataMember: 'entityDetails.name'},
								{key:'$BALANCE$', dataMember: 'accountDetails.actualBalanceFormatted'}
							];							  
}
)();
