window.ajaxCall = false;
window.loaderblock = '#formsteps';

(function(b){b.toast=function(a,h,g,l,k){b("#toast-container").length||(b("body").prepend('<div id="toast-container" aria-live="polite" aria-atomic="true" style="z-index:999999999"></div>'),b("#toast-container").append('<div id="toast-wrapper"></div>'));var c="",d="",e="text-muted",f="",m="object"===typeof a?a.title||"":a||"Notice!";h="object"===typeof a?a.subtitle||"":h||"";g="object"===typeof a?a.content||"":g||"";k="object"===typeof a?a.delay||3E3:k||3E3;switch("object"===typeof a?a.type||"":l||"info"){case "info":c="bg-info";
f=e=d="text-white";break;case "success":c="bg-success";f=e=d="text-white";break;case "warning":case "warn":c="bg-warning";f=e=d="text-white";break;case "error":case "danger":c="bg-danger",f=e=d="text-white"}a='<div class="toast" role="alert" aria-live="assertive" aria-atomic="true" data-delay="'+k+'">'+('<div class="toast-header '+c+" "+d+'">')+('<strong class="mr-auto">'+m+"</strong>");a+='<small class="'+e+'">'+h+"</small>";a+='<button type="button" class="ml-2 mb-1 close" data-dismiss="toast" aria-label="Close">';
a+='<span aria-hidden="true" class="'+f+'">&times;</span>';a+="</button>";a+="</div>";""!==g&&(a+='<div class="toast-body">',a+=g,a+="</div>");a+="</div>";b("#toast-wrapper").append(a);b("#toast-wrapper .toast:last").toast("show")}})(jQuery);

function showAlert(msg,type)
{
	msg=msg || 'Success';
	type=type || 'success';
	
	$.toast({
		title: type.replace(/(^|\s)\S/g, function(t) { return t.toUpperCase() }),
		content: msg,
		type: type,
		delay: 5000
	});
}

function progressIndicator(show)
{
	contr=loaderblock || '#fdsformsteps';
	if (jQuery('#prgloader').length==0) {
		var lh='<div id="prgloader" class="ctplloader d-flex flex-row justify-content-center align-items-center"><div class="loadercont"><i class="fa fa-spinner fa-pulse fa-3x"></i><p class="text-shadow" style="color: #fff;">Please wait...</p></div></div>';
		jQuery(contr).append(lh);
	}
	if (show) {jQuery('#prgloader').show();}
	else { jQuery('#prgloader').remove(); }
	return true;
};

function asyncAjaxRequest(task, datastring) {
	var ajaxoption = {
		type: "POST",
		url: ajaxurl + task,
		data: datastring,
		async: false
	};
	jQuery.ajaxSetup({
		headers: {
			'X-CSRF-TOKEN': _token
		}
	});
	return jQuery.parseJSON($.ajax(ajaxoption).responseText);
}

function AjaxRequest (requestUrl, datastring, callBack, isformdata, extraData) {
	requestUrl = (requestUrl.indexOf('http://') !== -1 || requestUrl.indexOf('https://') !== -1) ? requestUrl : ajaxurl+requestUrl;
	if (!ajaxCall) {
		progressIndicator(true);
		ajaxCall = true;
		var ajaxoption = {
			type: "POST",
			url: requestUrl,
			data: datastring,
			dataType: 'json'
		};
		isformdata = isformdata || false;
		if (isformdata) {
			ajaxoption.processData = false;
			ajaxoption.contentType = false;
		}
		//contenttype = isformdata || 'application/x-www-form-urlencoded; charset=UTF-8';
		jQuery.ajaxSetup({
		headers: {
				'X-CSRF-TOKEN': _token
			}
		});
		jQuery.ajax(ajaxoption).done(function(result){
			  ajaxCall = false;
			  progressIndicator(false);
			  if (result.success)
			  {
				result.datastring = datastring;
				if ( typeof callBack === "function" ) {
					if (typeof extraData !== 'undefined') callBack(result,extraData);
					else callBack(result);
				}
				else return result;
			  } 
			  else {
				if (typeof callBack === "function" && typeof extraData !== 'undefined' && extraData.callBackOnError) callBack(result,extraData);
				else showAlert('Error ! '+result.message,'error');
			  }
		}.bind(this))
		.fail(function(xhr, textStatus, errorThrown) {
			ajaxCall = false;
			progressIndicator(false);
			if(xhr.status == 422){
				console.log(xhr);
				var resJson = xhr.responseJSON;
				var errMsg = '';
				$.each(resJson.errors, function (key, data) {
				    $.each(data, function (index, data) {
				        errMsg += data + '<br/>';
				    });
				});
				showAlert(resJson.message + '<br/>' + errMsg,'error');
			}
			else{
			showAlert('Failed:  '+xhr.readyState+'  '+xhr.status+'  '+xhr.responseText+'  '+textStatus+'  '+errorThrown,'error');

			}
			if ( typeof callBack === "function" ) {
					if (typeof extraData !== 'undefined') callBack(xhr,extraData);
					else callBack(xhr);
			}else return result;
		});
	}
	return true;
};

function setAjaxSelectOptions(obj,parentobj)
{
	parentobj = parentobj || '#dataForm';
	obj = obj || '.ajaxselect';
	loaderblock = parentobj;
	jQuery(obj).select2(
		{
			dropdownParent: jQuery(parentobj),
			minimumInputLength: 2,
			ajax: {
				url: ajaxurl+'/getData',
				dataType: 'json',
				type: 'POST',
				headers: {
					'X-CSRF-TOKEN': _token
				},
				data: function (params) {
				  return {
					action: 'autocomplete',
					name: $(this).data('searchfield'),
					value: params.term, // search text
					page: params.page || 0
				  };
				},
				processResults: function (response) {
					return {
						results: $.map(response.data, function (val,idv) {
							return {
								text: val,
								id: idv
							}
						})
					};
				},
			}
		}
	);
};

function onChangeGetData(obj,sourcefield,callback)
{
	loaderblock = '#main-content';
	AjaxRequest('/getData', { id: jQuery(obj).val(), reqtype:sourcefield}, callback);
};

function printMe(id)
{

  var divToPrint=document.getElementById(id);
  var newWin=window.open('','Print-Window');
  newWin.document.open();
  newWin.document.write('<html><body onload="window.print()">'+divToPrint.innerHTML+'</body></html>');
  newWin.document.close();
  setTimeout(function(){newWin.close();},10);
  return true;
};

function deleteTableRow(row,callBack)
{
	jQuery.confirm({
		title: 'Please Confirm!',
		content: 'Are you sure to delete this row?',
		buttons: {
		    confirm: function () {
		        jQuery(row).remove();
				if ( typeof callBack === "function" ) callBack();
		    },
		    cancel: function () {
		        return true;
		    },
		}
	});
};

function applySelect2(obj,callbackOnChange)
{
	obj = obj || '.aselect2';
	callbackOnChange = callbackOnChange||false;
	var selobj =
	jQuery(obj).select2({
		placeholder: 'Select...',
		allowClear: false,
		templateSelection: function (data, container) {
			return data.text.replace(/^-+/g, "");
		}
	});
	if (callbackOnChange) {
		selobj.on("change", function (e) { callbackOnChange(obj,e); });
	}
	else {
		selobj.select2().change(function() {
			jQuery(this).valid();
		});
	}
};

function applyDatePicker(obj)
{
	obj = obj || '';
	// apply datetime picker plugins for datetime field
	$(obj+' .input-group.date').each(function(){
		var defaultdt = $(this).find('input').data('value') || '';
		var dtoption = {
				allowInputToggle: true,
				format: 'DD-MM-YYYY hh:mm A',
			};
		if (defaultdt) {
			dtoption['defaultDate'] = defaultdt;
		}
		/*$(this).datepicker({
		format: 'dd-mm-yyyy'
		});*/
	});
	$(obj+' .datepicker').datepicker({
		format: 'dd-mm-yyyy'
	});
};

function validateProceed()
{
    var form = jQuery('#paymentform');
    var pamt = jQuery('input[name="data[amount]"]').val();
    var pg = jQuery('input[name="data[gateways]"]').is(":checked");
    var tc = jQuery('#termsaccepted:checkbox:checked').length > 0;
    if (pamt > 0 && !pg) {showAlert('Please select one payment method first!','error');return false;}
    if (!tc) {showAlert('Please indicate that you have read and agree to the Terms and Conditions!','error');return false;}
    
	var pform = document.getElementById('paymentform');
	var formData = new FormData(pform);
	loaderblock = '#paymentblock';
	AjaxRequest ('/request', formData, processPayment, true);
};

function processPayment(response) {
	if (response.success){
		jQuery('body').append(response.data);
	}
	else {
		//--- if data not saved then show error
		showAlert(response.message,'error');
	}
};

function validatePayment(id) {
	AjaxRequest ('/payments/validatepayment', {pid: id}, paymentUpdates);
};

function paymentUpdates(response)
{
	if (response.success) {
		showAlert(response.message,'success');
		location.reload();
	}
}

function disableBrowserBackButton()
{
	history.pushState(null, document.title, location.href);
	window.addEventListener('popstate', function (event)
	{
	  history.pushState(null, document.title, location.href);
	});
}

function showSummeryFile(obj, id) {
	var pid = id || 0;
	if (pid) {
		$.dialog({
			title: 'Preview',
			animation: 'scale',
			columnClass: 'col-md-12 col-md-offset-3',
			closeAnimation: 'scale',
			backgroundDismiss: true,
			containerFluid: true,
			escapeKey: true,
			content: function () {
				var self = this;
				return $.ajax({
					type: "POST",
					headers: {'X-CSRF-TOKEN': $('meta[name="csrf-token"]').attr('content')},
					url: ajaxurl+'/reports/applicants/getData/',
					data: {id: pid, action:'getSummary'},
					dataType: 'json'
				}).done(function (response) {
					self.setContent(response.data);
				}).fail(function(){
					self.setContent('Something went wrong.');
				});
			}
		});
	}
};

function updateCorses(objProgramId, objCourseId, defaultValue='')
{
	objProgramId = objProgramId || '#programid';
	objCourseId = objCourseId || '#courseid';
	var course_programme_type = $(objProgramId).val() || '';
	if (course_programme_type) {
		console.log(courseslist[course_programme_type]);
		refreshSelectOptions(objCourseId, courseslist[course_programme_type], defaultValue, {'key':'id','value':'course'});
	}
	else refreshSelectOptions(objCourseId, {}, defaultValue)
}

function updateStates(objCountry, objState, objDistrict, defaultValue='')
{
	 
	objCountry = objCountry || '#country';
	
	objState = objState || '#state';
	objDistrict = objDistrict || '#district';
	var country = $(objCountry).val() || '';
	 
	 
	   
	if (country) {
		refreshSelectOptions(objState, statelist[country], defaultValue);
	}
	else {
		refreshSelectOptions(objState,{}, defaultValue);
	}
	refreshSelectOptions(objDistrict,{},'');
}

function updateDistrict(objState, objDistrict, defaultValue='')
{
	objState = objState || '#state';
	objDistrict = objDistrict || '#district';
	var state = $(objState).val() || 0;
	state = ($.isArray(state) && state.length > 0) ? state[0] : state;
	if (state) {
		refreshSelectOptions(objDistrict, statedistrictlist[state], defaultValue);
	}
	else refreshSelectOptions(objDistrict, {}, defaultValue);
}

function refreshSelectOptions(selobj,data,defaultval,keyvalue) {
	 
	var opt = '';
	keyvalue = keyvalue || {};
	//var keys = Object.keys(data);
	defaultval = defaultval || "";
	if(selobj == '#state'){
		opt += '<option value="" '+ ("" === defaultval ? ' selected' : '') + '>-Select State-</option>';
	}else if(selobj == '#district'){
		opt += '<option value="" '+ ("" === defaultval ? ' selected' : '') + '>-Select District-</option>';
	}else{
		opt += '<option value="" '+ ("" === defaultval ? ' selected' : '') + '>-Select-</option>';
	}

	
	$.each(data, function (idx, val) {
		idx = (keyvalue.hasOwnProperty('key') ? val[keyvalue.key]: idx);
		val = (keyvalue.hasOwnProperty('value') ? val[keyvalue.value]: val);
		var sel = (idx == defaultval) ? ' selected' : '';
		opt += '<option value="' + idx + '"' + sel + '>' + val + '</option>';
	});
	
	$(selobj).empty().append(opt);
}; 

function makePayment(formid, paymenttype, feeSetup)
{
	if (formid) {
		paymenttype = paymenttype || 'Registration Fee';
		if(paymenttype == 'Registration Fee'){
			$('<form action="'+baseurl+'payments" method="POST"><input name="_token" value="'+_token+'"/><input name="data[form_id]" value="'+formid+'"/><input name="paymenttype" value="'+paymenttype+'"/><input name="data[referer_module]" value="userForms"/></form>').appendTo('body').submit();
		}
		else{
			if (documentverified == 1 || docapprovenabled == 'No') {
				
				jQuery.confirm({
						title: 'Make Provisional Payment!',
						content: '<form method="post" id="payform" action="'+baseurl+'payments"><input type="hidden" name="_token" value="'+_token+'"/><input type="hidden" name="data[form_id]" value="'+formid+'"/><input type="hidden" name="paymenttype" value="'+paymenttype+'"/><label>Total Amount:</label><input type="number" id="pfamount" name="data[amount]" class="form-control" value="'+feeSetup.amount+'" min="'+feeSetup.min+'" max="'+feeSetup.max+'"/></form>',
						buttons: {
						    pay_fee: function () {
						    	if($("#pfamount").val() <= 0 || $("#pfamount").val() < parseInt(feeSetup.min) || $("#pfamount").val() > parseInt(feeSetup.max)){
						    	 		showAlert('Error ! Provisional amount should not be less than '+feeSetup.min+ ' and not greater than '+feeSetup.max, 'error');
						    	 		return false;
						    	}
						    	$('#payform').submit();
						    },
						    cancel: function () {
						        return true;
						    },
						}
				});
			}
			else{
				showAlert('You cant pay provisional payment because documents are not approved or pending for approval.','error');
			}
		}
	}
}

function showSummeryFileFrontend(obj, id) {
		var pid = id || 0;
		if (pid) {
			AjaxRequest('/getData', {id: pid, action:'getSummary'}, showSummary);
		}
};

function showSummary(res){
		if(res.success){
			var html = res.data;
			$('#summaryModal #summary_preview').html(html);
			$('#summaryModal').modal('show');
		}else{
			var html = '<h3>Something Went Wrong !!</h3>';
			$('#summaryModal #summary_preview').html(html);
			$('#summaryModal').modal('show');
		}
}

function reUploadDocument(mediaid){
	if(mediaid){
		jConfirm = jQuery.confirm({
			title: 'Upload Dcoument!',
			content: '<form method="post" action="" enctype="multipart/form-data">Select file : <input type="file" name="file" id="file" class="form-control" > </form>',
			buttons: {
			    upload: function () {
							var fd = new FormData();
					    var files = $('#file')[0].files[0];
					    var fname = files.name;
							var fsize = files.size;
							var ftype = files.type;
							var fileMaxSize = Math.round((fsize / 1024));
							
							if (fname == '' || fsize <= 0 || $.inArray(ftype,['image/png','image/jpeg','image/jpg','application/pdf']) < 0) {
								showAlert('Invalid file or file type. File name: '+fname,'error');
							}
							else if(fileMaxSize > 1024){
								showAlert('Please select a File less than 1MB','error');
							}
							else {
							    fd.append('file',files);
							    fd.append('mediaid',mediaid);
							    fd.append('uploadSource','dashboard');
							    var self = this;
							    self.setTitle('Document uploading, please wait...');
									self.showLoading(true);
									$(jConfirm.$title).css({'position':'absolute','z-index':'2'});
									AjaxRequest('/uploadDocument',fd, function(response){showAlert('File uploaded','success');jConfirm.close();
									//window.location.reload();
									console.log(response);
									$('#reuploadbtn').remove();

									var path = response.data.media_path;
									var pathArray = path.split("/");
									var secondToLastElement = pathArray[pathArray.length - 2];	

								var status = (response.data.document_approved > 0) ? 'Approved' : ((response.data.document_rejected > 0) ? 'Rejected' : 'Pending');
                                var dochtml = `<a data-href="${response.data.media_name}" data-mid="${response.data.media_details_id}" data-pid="${secondToLastElement}" href="javascript:void(0)"  onclick="showFile(this)">${response.data.media_name}</a>
									`; 
								$('#doc'+ mediaid).html(dochtml);
                                  
								$('#docstatus'+ mediaid).text(status);
								$('#doccomment'+ mediaid).text(response.data.document_reject_comment);
  
								},true);
							}
							return false;
					},
					cancel: function () {
			        return true;
			    },
			}
		});
	}else{
		showAlert("No document selected",'error');
	}
}



function updateDocument(docapprovenabled){
	//console.log(docapprovenabled);
	var fd = new FormData();
  var files = $('#formdocument')[0].files[0];
  var fname = files.name;
	var fsize = files.size;
	var ftype = files.type;
	var fileMaxSize = Math.round((fsize / 1024));
		
	if (fname == '' || fsize <= 0 || $.inArray(ftype,['image/png','image/jpeg','image/jpg','application/pdf']) < 0) {
		showAlert('Invalid file or file type. File name: '+fname,'error');
	}
	else if(fileMaxSize > 1024){
		showAlert('Please select a File less than 1MB','error');
	}
	else {
		fd.append('file',files);
		var userformid = $("#userformid").val();
		var mediatype = $("#mediatype").val();
		fd.append('mediatype',mediatype);
		fd.append('userformid',userformid);
		fd.append('uploadSource','dashboard');
		//AjaxRequest('/uploadDocument',fd, documentSectionRefresh,true);
		AjaxRequest('/uploadDocument', fd, function(response) {
            documentSectionRefresh(response, docapprovenabled);
        }, true);
	}
}

function documentSectionRefresh(response, docapprovenabled){
	//console.log(docapprovenabled);
	if(response.success == true){
				//location.reload();
				var path = response.data.media_path;

				// Split the path by "/"
				var pathArray = path.split("/");
				
				// Get the second-to-last element
				var secondToLastElement = pathArray[pathArray.length - 2];
				console.log(docapprovenabled);		
			if(docapprovenabled==true){

				var html = `<tr>
							<td>${response.data.media_descr}</td>
							<td><a data-href="${response.data.media_name}" data-mid="${response.data.media_details_id}" data-pid="secondToLastElement" href="javascript:void(0)"  onclick="showFile(this)">${response.data.media_name}</a></td>
							<td style="text-align:center">`+moment().format('DD-MMM-YY')+`</td>
							<td>Pending</td>
							<td></td>
							<td></td>
						</tr>`;
			}else{
				var html = `<tr>
							<td>${response.data.media_descr}</td>
							<td><a data-href="${response.data.media_name}" data-mid="${response.data.media_details_id}" data-pid="secondToLastElement" href="javascript:void(0)"  onclick="showFile(this)">${response.data.media_name}</a></td>
							<td style="text-align:center">`+moment().format('DD-MMM-YY')+`</td>
							<td></td>
							<td></td>
							<td></td>
						</tr>`;

			}		
		
		$("#updateDocumentSection").append(html);
		
		$("#mediatype").val('');
		$("#userformid").val('');
		$("#formdocument").val('');
		
		hideForm('documentupdatecont','documentupdatebtn');

	}
}



function fileresponse(response) {
	if (response.success) {
		showflyout(response,false)
	}
	else if (response.message) showAlert(response.message, 'error');
};

function showFile(obj) {
        var pid = $(obj).data('pid') || $('input[name="data[id]"]').val();
        var mid = $(obj).data('mid') || 0;
        var furl = $(obj).data('href') || '';
        if (pid && furl) {
            $.dialog({
                title: 'File Preview: '+furl,
                animation: 'scale',
                //columnClass: 'col-md-12 col-md-offset-3',
                closeAnimation: 'scale',
                backgroundDismiss: true,
                containerFluid: true,
                escapeKey: true,
                content: function () {
                    var self = this;
                    return $.ajax({
                        type: "POST",
                        headers: {'X-CSRF-TOKEN': $('meta[name="csrf-token"]').attr('content'), '_method': 'patch'},
                        url: ajaxurl+'/getData',
                        data: {id: pid,furl:furl,mid:mid,action:'filePreview'},
                        //dataType: 'json'
                    }).done(function (response) {
                    	console.log(response);
                        var ext = furl.split('.').pop();
                        ext = ext.toLowerCase();
                        if (ext=='pdf') var html = '<embed src="' + response.data + '" frameborder="0" width="100%" height="600px">';
                        else var html = '<img src="' + response.data + '" style="display:block;margin:0 auto;"/>';
                        self.setContent(html);
                    }).fail(function(){
                        self.setContent('Something went wrong.');
                    });
                }
            });
        }
};

function showAjaxPdf(paymentid){
	AjaxRequest('/getData', {paymentid: paymentid, action:'downloadReceipt'},showReceipt);
}

function showReceipt(response)
{
	$.dialog({
		title: 'Receipt',
		columnClass: 'col-md-12 col-md-offset-3',
		content: function(){
			return '<object data="'+'data:application/pdf;base64,'+response.data.data+'" type="application/pdf" width="100%" height="600px"><p>Your browser does not support PDF files.</p></object>';
		}
	});
};

function phoneWithCountry(obj)
{
	var dcountry = $(obj).find('.countrylist');
	
	var defaultValue = dcountry.data('countrycode') || 1;
	
	dcountry.empty();
	$.each(countrylist, function(i,cdata){
		dcountry.append('<option value="'+i+'">'+cdata.name+'</option>');
	});
  
	$(obj).find('.countrylist').select2({
		placeholder: 'Select country',
		dropdownAutoWidth : true,
		templateResult: function(data) {
			if (!data.id) {
				return data.text;
			}
			var country = countrylist[data.id];
			
			return $(
				'<span><img src="https://cdn.ip2location.com/assets/img/flags/'+country.short_name.toLowerCase()+'.png" class="img-flag" /> ' + data.text + ' ('+country.code+')</span>'
			);
		},
		templateSelection: function(data) {
			var country = countrylist[data.id];
			$(obj).find('input.countrycode').val(country.code);
			$(obj).find("input.phonenumber").attr('maxlength', (data.id==1 ? 10 : 12));
			return $(
				'<span><img src="https://cdn.ip2location.com/assets/img/flags/'+country.short_name.toLowerCase()+'.png" class="img-flag" /> ' + country.code + '</span>'
			);
		}
	});
	
	$(obj).find("input.phonenumber[type=number]").on("keydown", function(event) {
		if (event.keyCode === 38 || event.keyCode === 40) {
			event.preventDefault();
		}
	});
}