/* Write here your custom javascript codes */

jQuery(document).ready(function(e){
//Using myValidate Class in input type
	$('.myValidate').bind('cut copy paste', function (e) {
      	e.preventDefault();
   });

    $(".myValidate").keypress(function(key){
       var checkKey = key.charCode;
       // alert(checkKey);     
         // if(key.charCode < 48 || key.charCode > 57) return false;
         switch (checkKey) {
		    case 92:
		        return false;//backslash  /
		        break;
		    case 47:
		        return false;// Forward backslash \
		        break;
		    case 124:
		        return false; // OR Address |
		        break;
		    case 38:
		        return false;  // AND Address
		        break;
		    case 33:
		        return false; // NOT Address !
		        break;
		    case 94:
		        return false; // This sign ^
		        break;
		     case 96:
		        return false; // This sign `
		        break;
		      case 44:
		        return false; // Comma Sign ,
		        break;
		      case 46:
		        return false; // DOT Sign .
		        break;
		      case 91:
		        return false; // This sign [
		        break;
		      case 93:
		        return false; // This sign ]
		        break;
		  default:
		      return true;
		}
    });
    




	if($(".tinymce").length){
		$.each($(".tinymce"), function(i,e){
			var h = $(this).data("height");
				h = typeof h =='undefined' ? 325 :h;

			var pi = $(this).data("plugin");
			var mb = $(this).data("menubar");
			var tb = $(this).data("toolbar");
			var ignore = $(this).data("ignore");
			var sb = $(this).data("statusbar");

			runTinymce("#"+ $(this).attr("id"), h, pi, mb, tb, ignore, sb);
		});
	}

	/* Custom js function */



});

var js = function (){
	return {
		
	}
}();



/* user role evt. */
function evt_roles(sel){
	
	var v = $(sel).find(":selected").val(),
		c = $(sel).find(":selected").data("code");

	$(sel).closest("form").find("."+c).removeClass("hidden");
	$(sel).closest("form").find(".not-"+c).addClass("hidden");



}


/* jwPlayer - main conf */
if($(".jwplayer").length) {
	jQuery.each($(".jwplayer"), function(k, v) {
		load_jwplayer($(this).data("playerid"), $(this).data("source"), $(this).data("tmb"));
	});
}

function load_jwplayer(player_id ='jwplayer', source, thumbnail) {

	if(typeof jwplayer !='undefined') {

		jwplayer.key="tXwrW26TZwRhZeG5DyN8OtKTtXlmUlGmZiN9KQ==";

		var pageReloaded = JSON.parse(localStorage.getItem('jwplayer.page-reloaded'));

		if(source){
			jwplayer(player_id)
				.setup({
					file: source,
					image: thumbnail,
					width: "100%",
					aspectratio: "16:9",
					// Do not autostart if the page was reloaded.
	  				autostart: pageReloaded ? !pageReloaded : true,
					modes: [ { type: "html5" }, { type: "flash", src: "player.swf" } ]
				});

			localStorage.setItem('jwplayer.page-reloaded', true);
		}
	}
}

if($(".load-jwplayer").length) {
	$(".load-jwplayer").on("click", function(e) {

		$.confirm({
			columnClass: 'col-md-8 col-md-offset-2',
		    title: `<div class="row">
	    				<div class="col-md-12">
	    					<h2>
	    						<i class="glyphicon glyphicon-hd-video"></i>
	    						របៀបចុះឈ្មោះ
	    					</h2>
	    				</div>
	    			</div>`,
		    content: `<div class="row">
		    				<div class="col-md-6">
		    					<div style="position:relative;height:0;padding-bottom:56.25%">
                                    <iframe src="https://www.youtube.com/embed/INfVCf6WPII?ecver=2"
                                        width="640" height="360" frameborder="0" gesture="media"
                                        style="position:absolute;width:100%;height:100%;left:0" allowfullscreen></iframe></div>
		    					<div class="margin-top-5 margin-bottom-10 text-center">
		    						របៀបចុះឈ្មោះសម្រាប់កម្មសិក្សាការី
		    					</div>
		    				</div>
		    				<div class="col-md-6">
		    					<div style="position:relative;height:0;padding-bottom:56.25%">
                                    <iframe src="https://www.youtube.com/embed/4oPBU8IJv-o?ecver=2"
                                        width="640" height="360" frameborder="0" gesture="media"
                                        style="position:absolute;width:100%;height:100%;left:0" allowfullscreen></iframe></div>
		    					<div class="margin-top-5 margin-bottom-10 text-center">
		    						របៀបចុះឈ្មោះសម្រាប់ក្រុមហ៊ុន
		    					</div>
		    				</div>
		    			</div>`,
		    buttons: {
		        close: function(){}
		    },
		    onContentReady: function () {
		    	jQuery.each($(".jwplayer"), function(k, v) {
					load_jwplayer($(this).data("playerid"), $(this).data("source"), $(this).data("tmb"));
				});
		    }
		});
	});
}

if($("#new_input").length){
	$("#new_input").on("click", function(e){
		e.preventDefault();

		var f = $(this).data("for");
		var t = $(this).data("type");

		var $pr = $(this).closest("section");
		var $lbl = $pr.find("[name='"+ f +"']").closest("label");
			$lbl.remove();

		var ni = `<label class="input ofni">
						<div class="row">
							<div class="col-md-8">
								<input type="text" name="`+ f+`" class="`+ t +` flexibled"/>
							</div>
							<div class="col-md-4">
								<button class="btn-u btn-u-primary rollback">Remove</button>
							</div>
						</div>
					</label>
				`;

		if(!$pr.find("ofni").length){

			$pr.append(ni);
			$(this).attr("disabled", true);

			if(t =='code'){
				$("."+t).bind('contextmenu cut copy paste', function(e) {
						e.preventDefault();
					}).keydown(function(e) {
				        if (e.ctrlKey==true && (e.which == '118' || e.which == '86')) {
				            e.preventDefault();
				        }
				    }).on('keypress', function (event) {
					    var regex = new RegExp("^[a-zA-Z0-9\-._\+]+$");
					    var key = String.fromCharCode(!event.charCode ? event.which : event.charCode);
					    if (!regex.test(key)) {
					       event.preventDefault();
					       return false;
					    }
					});
			}

			$(".rollback").unbind("click").on("click", function(e){
				$pr.find(".ofni").remove();
				$pr.append($lbl);
				$("#new_input").removeAttr("disabled");
			});
		}
	});
}





function slugify(text){
  	return text.toString().toLowerCase()
			    .replace(/\s+/g, '-')           // Replace spaces with -
			    .replace(/[^\w\-]+/g, '')       // Remove all non-word chars
			    .replace(/\-\-+/g, '-')         // Replace multiple - with single -
			    .replace(/^-+/, '')             // Trim - from start of text
			    .replace(/-+$/, '');            // Trim - from end of text
}

function slug_current_date(){

	var days = ['Sunday', 'Monday', 'Tuesday', 'Wednesday', 'Thursday', 'Friday', 'Saturday'];

	var vd = new Date();
	var d = vd.getDate();
	var m = vd.getMonth() +1;
	var y = vd.getFullYear();

	d = d<10 ? '0'+d :d;
	m = m<10 ? '0'+m :m;

	return days[vd.getDay()].toString().toLowerCase() +'-'+ m +'-'+ d +'-'+ y +'-'+ Math.floor(Date.now() / 1000);
}

/* title slug. */
function slug(title, code){

	code = $("input[name='"+ code +"']")
			.closest('form').find("input[name='"+ title +"']").val()
			.replace(/[^a-z0-9\s]/gi, '').replace(/\s+/g, '-').toLowerCase();

	if(code.slice(1) =='-'){ code = code.substring(0, 1); }
	else if(code.slice(-1) =='-'){ code = code.slice(0, -1); }

	return code;
}

if($(".secure").length){
	$(".secure")
		.bind('contextmenu cut copy paste', function(e) {
			e.preventDefault();
		})
		.keydown(function(e) {
	        if (e.ctrlKey==true && (e.which == '118' || e.which == '86')) {
	            e.preventDefault();
	        }
	    });
}

if($("input[name='code']").length){

	var $input = $("input[name='code']");

	$input
	.focus(function(e){
		if(!$input.val()){
			$input.val(slug('title', 'code'));
		}
	})
	.bind('contextmenu cut copy paste', function(e) {
		e.preventDefault();
	})
	.keydown(function(e) {
        if (e.ctrlKey==true && (e.which == '118' || e.which == '86')) {
            e.preventDefault();
        }
    })
    .on('keypress', function (event) {
	    var regex = new RegExp("^[a-zA-Z0-9\-._\+]+$");
	    var key = String.fromCharCode(!event.charCode ? event.which : event.charCode);
	    if (!regex.test(key)) {
	       event.preventDefault();
	       return false;
	    }
	});

	$("#auto_code").click(function(e){

		e.preventDefault();
		var slgu = slug('title', 'code');

		if(slgu =='' && $input.val() ==''){
			return $input.val(slug_current_date());
		}else if(slgu =='' && $input.val() !=''){
			return false;
		} else { $input.val(slgu); }
	});
}

/* tinymce init. */
function runTinymce(sel, h, pi, mb, tb, ignore, sb){

	var plugin = `advlist autolink lists link image charmap print preview hr anchor pagebreak `+
				`searchreplace wordcount visualblocks visualchars code fullscreen `+
				`insertdatetime media nonbreaking save table directionality `+
				`emoticons template paste textcolor colorpicker textpattern imagetools`;

	if(pi in ['min', 'mini'] || pi ==false){
		plugin = `advlist autolink lists link image charmap print preview anchor `+
				    `searchreplace visualblocks code fullscreen `+
				    `insertdatetime media table paste code`;
	}

	var menubar = typeof mb =='undefined' ? true :mb;

	var toolbar = `forecolor backcolor bold italic | alignleft aligncenter alignright | `+
					`bullist numlist outdent indent | fullscreen link image code`;

		toolbar = typeof tb =='undefined' ? toolbar :tb;


		if(typeof ignore !=='undefined'){
			var arr = ignore.split(',');
			$.each(arr, function(i,e){
				if(~toolbar.indexOf(arr[i].toString().trim())){
					toolbar = toolbar.replace(arr[i].toString().trim(), '');
				}
			});
		}

	var statusbar = typeof sb =='undefined' ? true :false;

	if($(sel).length){

		tinymce.init({
			selector: sel,
			height: h,
			skin: 'light',
			language: 'km_KH',
			plugins: [ plugin ],
			menubar: menubar,
			toolbar: toolbar,
			statusbar: statusbar,
			branding: false,
			document_base_url: '/',
			relative_urls: false,
			remove_script_host: false,
			file_picker_callback : elFinderBrowser,
			file_browser_callback : 'elFinderBrowser',
			convert_urls : false,
			browser_spellcheck : true,
			content_css: "/assets/css/custom.css?t="+ Math.floor(Date.now()),
		  	setup: function (ed) {
		        ed.on('change', function () {
		            tinyMCE.triggerSave();
		        });
		        ed.on('keydown', function(evt) {
			        if (evt.keyCode == 9) { /* tab pressed */
			          	if (evt.shiftKey) { ed.execCommand('mceInsertContent', false, '&emsp;'); }
			         	else { ed.execCommand('mceInsertContent', false, '&emsp;'); }

			          	evt.preventDefault();
			         	return false;
			        }
			    });
		    },
	        pagebreak_separator : "<!-- readmore -->"
		});

		function elFinderBrowser (callback, value, meta) {
			tinymce.activeEditor.windowManager.open({
				file: '/elFinder-2.1.24/elfinder+jq79.html',// use an absolute path!
				title: 'elFinder 2.1',
				width: 900,
				height: 450,
				resizable: false
			}, {
				oninsert: function (file, fm) {
					var url, reg, info;

					// URL normalization
					url = file.url;
					reg = /\/[^/]+?\/\.\.\//;
					while(url.match(reg)) {
						url = url.replace(reg, '/');
					}

					// Make file info
					info = file.name + ' (' + fm.formatSize(file.size) + ')';

					// Provide file and text for the link dialog
					if (meta.filetype == 'file') {
						callback(url, {text: info, title: info});
					}

					// Provide image and alt text for the image dialog
					if (meta.filetype == 'image') {
						callback(url, {alt: info});
					}

					// Provide alternative source and posted for the media dialog
					if (meta.filetype == 'media') {
						callback(url);
					}
				}
			});
			return false;
		}
	}
}

/* current language. */
$.fn.activeLang = function (){
	var languagecode='NA';
	var path_parts = location.pathname.split("/");
	if(path_parts.length >=2){
		if(path_parts[1].length==2){
			languagecode=path_parts[1];
		}
	}
	return languagecode;
};

/* image thumbnail. */
function readURL(input, target) {

    if (input.files && input.files[0]) {
        var reader = new FileReader();

        reader.onload = function (e) {
            $("#"+ target).attr('src', e.target.result);
        }

        reader.readAsDataURL(input.files[0]);
    }
}

/* is_numeric. */
function isNumeric(n) { return !isNaN(parseFloat(n)) && isFinite(n); }

/* number only. */
$(".number")
.keydown(function(e) {
    // Allow: backspace, delete, tab, escape, enter and .
    if ($.inArray(e.keyCode, [46, 8, 9, 27, 13, 110, 190]) !== -1 ||
        // Allow: Ctrl+A
        (e.keyCode == 65 && e.ctrlKey === true) ||
        // Allow: Ctrl+C
        (e.keyCode == 67 && e.ctrlKey === true) ||
        // Allow: Ctrl+X
        (e.keyCode == 88 && e.ctrlKey === true) ||
        // Allow: home, end, left, right
        (e.keyCode >= 35 && e.keyCode <= 39)) {
        // let it happen, don't do anything
            return;
    }

    // Ensure that it is a number and stop the keypress
    if ((e.shiftKey || (e.keyCode < 48 || e.keyCode > 57)) && (e.keyCode < 96 || e.keyCode > 105)) { e.preventDefault(); }
    else if(!isNumeric(e.key) ){ return false; }
});

/* en_US char. */
$('.enchar').on('keypress', function (event) {
    var regex = new RegExp("^[a-zA-Z0-9._-]+$");
    var key = String.fromCharCode(!event.charCode ? event.which : event.charCode);
    if (!regex.test(key)) {
       event.preventDefault();
       return false;
    }
});

/* for numberof_staff */
$('.numberof')
.on('keypress', function (event) {
    var regex = new RegExp("^[0-9\-<>]+$");
    var key = String.fromCharCode(!event.charCode ? event.which : event.charCode);
    if (!regex.test(key)) {
       event.preventDefault();
       return false;
    } else{
    	if(event.charCode ==45 || event.charCode ==60 || event.charCode ==62){
    		if($(this).val().indexOf('-') !=-1) return false;
    		if($(this).val().indexOf('<') !=-1) return false;
    		if($(this).val().indexOf('>') !=-1) return false;
    	}
	}
});

// If has sub fillin
if($(".toggle-child").length){
	$(".toggle-child").on("click", function(e){

		var aid = $(this).data("aid");
		var $pr = $(this).closest("section");
		var $thechild = $pr.find(".thechild");
		var $tcinput = $thechild.find("input");

		if($thechild.attr("data-childof") == aid){ $thechild.toggleClass("hidden"); }

		if($(this).prop("checked") ==true){ $tcinput.attr('name', $tcinput.attr("tmp-name")).removeAttr("tmp-name"); }
		else { $tcinput.attr('tmp-name', $tcinput.attr("name")).removeAttr("name"); }

	});
}

// Embed truefalse subanswer
if($(".tf-subanswer").length){
	$(".tf-subanswer").on("click", function(evt){

		var $t = $(this);
		var $pr = $t.closest(".tf-parent");
		var $hd_child = $pr.find(".for-subanswer");

		if($t.prop("checked") && $t.val() =='true'){ $hd_child.removeClass("hidden"); }
		else { $hd_child.addClass("hidden"); }

		if($t.prop("checked") && $t.val() =='false'){

			var $subChild = $hd_child.find("input");

			$.each($subChild, function(key, val){

				var $tmp = $(val);

				if($tmp.hasClass("toggle-child")){
					var $pr = $tmp.closest("section");
					var $child = $pr.find(".thechild").addClass("hidden");
				}

				switch($tmp.attr("type")){
					case 'checkbox':
						$tmp.attr('checked', false);
						break;
					default:
						$tmp.val(function(){ return this.defaultValue; });
						break;
				}
			});
		}
	});
}

/* custom ajax function. */
$(function () {

	"use strict";

	var ajaxRequest = {};
	var runResult = {};
	var siteSetting = {
		language:getLanguage(),
		ajaxurl:'/'+getLanguage()+'/ajax/request',
		loginurl:'/'+getLanguage()+'/login/start'
	};

	var local ='unknown';

	if($.browser.mozilla || $.browser.chrome){
		/* Compatibility for firefox and chrome */
		window.RTCPeerConnection = window.RTCPeerConnection || window.mozRTCPeerConnection || window.webkitRTCPeerConnection;
		var pc = new RTCPeerConnection({iceServers:[]}), noop = function(){};
		    pc.createDataChannel(""); /* create a bogus data channel */
		    pc.createOffer(pc.setLocalDescription.bind(pc), noop); /* create offer and set local description */

	    /* listen for candidate events */
	    pc.onicecandidate = function(ice){
	        if(!ice || !ice.candidate || !ice.candidate.candidate)  return;
	        local = /([0-9]{1,3}(\.[0-9]{1,3}){3}|[a-f0-9]{1,4}(:[a-f0-9]{1,4}){7})/.exec(ice.candidate.candidate)[1];
	        pc.onicecandidate = noop;
	    };
	}

	function getLanguage(){

		var languagecode='NA';
		var path_parts = location.pathname.split("/");

		if(path_parts.length >=2){
			if(path_parts[1].length==2){
				languagecode=path_parts[1];
			}
		}
		return languagecode;
	}

	function totalcol(tblid){
		var totalcol = $("#"+tblid+" table > thead").find("> tr:first > th").length;

		return {col:totalcol};
	}

	function jalert(type, msg){
		return '<div class="alert alert-'+ type +' fnt_light margin-top-5 margin-bottom-5 padding-top-4 padding-bottom-2 font-12 line-height-18" role="alert">'+
					'<button type="button" class="close" data-dismiss="alert">'+
						'<span aria-hidden="true">×</span>'+
						'<span class="sr-only">Close</span>'+
					'</button>'+
					msg +
				'</div>';
	}

	function is_json(str) {
	    try { JSON.parse(str); }
	    catch (e) { return false; }

	    return true;
	}

	if($(".no-data").length){
		$(".no-data").on("click", function(e){

			$.confirm({
			    title: '<i class="glyphicon glyphicon-bullhorn"></i> <span class="fnt_koulen info">ព័ត៌មាន</span>',
			    content: 'អធ្យាស្រ័យ, មិនមានទិន្នន័យសម្រាប់បង្ហាញទេ',
			    buttons: {
			        ok: {
			            text: "ok!",
			            btnClass: 'btn-primary',
			            keys: ['enter']
			        },
			        cancel: function(){}
			    }
			});
		});
	}

	// initialize toggleRadio

	// init previousValue = 'checked'
	jQuery.each($("input.toggle-checked[type='radio'], input.toggle-checked[type='checkbox']"), function(key, evt){
		if($(this).is(':checked') ){
			$(this).attr('previousValue', 'checked');
		}
	});

	$("input.toggle-checked[type='radio'], input.toggle-checked[type='checkbox']").click(function(){
		var previousValue = $(this).attr('previousValue');
		var name = $(this).attr('name');

		if (previousValue == 'checked'){
			$(this).removeAttr('checked');
			$(this).attr('previousValue', false);
		} else {
			$("input[name="+name+"]:radio").attr('previousValue', false);
			$(this).attr('previousValue', 'checked');
		}
	});


	function loading_overlay(alt =''){
		var overlay = 	`<div class="loading-overlay">
            				<img id="loading-start" src="/assets/img/`+ alt +`loading.gif"/>
            			</div>`;

        $(overlay).appendTo('body');

        $(".loading-overlay").dblclick(function(e){
        	remove_overlay();
        });

        // hit escape to close the overlay
        $(document).keyup(function(e) {
            if (e.which === 27) {
                remove_overlay();
            }
        });
	}

	function remove_overlay(){
		$('.loading-overlay').remove();
	}

	function loading_saved(){
		$("body").find(".loading-overlay").append(`<img id="loading-saved" src="/assets/img/saved.gif?t=`+ Math.floor(Math.random() * 99) + 1 +`"/>`);
		setTimeout(remove_overlay, 1300);
	}
	function custom_loading_saved(msg ='Data not Saved'){
		$.confirm({
		    title: '<i class="glyphicon glyphicon-ok"></i> <span class="fnt_koulen info">System alert</span>',
		    content: '<span class="font-18">'+ $(msg).find(".plain-text").html() +'</span>',
		    buttons: {
		        Close: function(){
		        	remove_overlay();
            	}
		    }
		});

	}
	



	function loading_error(msg ='Data not Saved'){
		$.confirm({
		    title: '<i class="icon-shield color-red"></i> <span class="fnt_koulen info">System alert</span>',
		    content: '<span class="font-18">'+ $(msg).find(".plain-text").html() +'</span>',
		    buttons: {
		        Close: function(){
		        	remove_overlay();
            	}
		    }
		});
	}

	// get from old prev.Form
	file_realTimeUpload();
	function file_realTimeUpload(){
		if($(".file_realTimeUpload").length){
			$(".file_realTimeUpload").unbind("change").on("change", function(evt){



				var $t = $(this);
				var tname = $t.attr("id");
				var tval = $t.val();

				var $prLabel = $t.closest("label.input");
				var $hdInput = $prLabel.find('input[name="'+ tname +'"]');
				var hdValue = $hdInput.val();
				var allow = $t.data('allow');






				if($prLabel.find("div.file_msg").length){ $prLabel.find("div.file_msg").remove(); }

				if(tval.trim() ===''){
					// clear old data
					$hdInput.val('');
					$t.parent().find("i").remove();

					return false;
				}

				/* check if have data-preview */
				var prev = $t.data("preview");
				if(typeof prev !='undefined'){
					readURL(this, prev);
				}


				// set loading status
				var tmp_browseLabel = $t.parent().html();
				if($t.parent().find("i").length ){ $t.parent().find("i").remove(); }
				$t.parent().append('<i class="fa fa-spinner fa-spin fa-3x fa-fw font-14 margin-left-5"></i>');

				var token = $t.closest("form").find("input[name='token']").val();
					token = typeof token !=='undefined' ? token :'';

				var frm = new FormData();
					frm.append('cmd', 'file_realTimeUpload');
					frm.append('token', token);
					frm.append('file', $t[0].files[0]);
					frm.append('fid', hdValue);
					frm.append('allow',allow);
					




				if(tval !==''){
					$.ajax({
						url: siteSetting.ajaxurl,	// Url to which the request is send
						type: "POST",             	// Type of request to be send, called as method
						dataType: 'html',
						timeout: 600000,
						data: frm, 					// Data sent to server, a set of key/value pairs (i.e. form fields and values)
						contentType: false,       	// The content type used when sending data to the server.
						cache: false,             	// To unable request pages to be cached
						processData:false,        	// To send DOMDocument or non processed data file it is set to false
						success: function(data)   	// A function to be called if request succeeds
						{

							var data = data ? JSON.parse(data) :'';
							console.log(data);
							var msgType = data.result ? 'success' :'danger';
							if(data.return == '' && data.allow == 'cv_application'){								
								$hdInput.val(' ');
								$("input[name='readonly']").val('');
								alert('Something went wrong with file extension...');
							}
							

							console.log(data.return);
							if(data.result && data.return !==''){
								$t.parent().find("i").remove();
								$t.parent().append('<i class="icon-check margin-left-5"></i>');

								// pass return to input								
								$hdInput.val(data.return);
							}

							if(!data.result){
								$t.parent().find("i").remove();
								$t.parent().append('<i class="icon-close margin-left-5"></i>');

								if($t.hasClass('flexibled')){
									$t.closest('.flexibled-error')
										.find('#for-'+ $t.attr('id'))
										.html('<div class="file_msg fnt_light margin-top-5">'+ data.msg +'</div>');
								} else {
									$prLabel.append('<div class="file_msg fnt_light margin-top-5">'+ data.msg +'</div>');
								}
							}
						},
						error: function (responseData, textStatus, errorThrown) {
							console.log( textStatus );
						}
					});
				}
			});
		}
	}

	// set chkDisplayName
	// $target_btn can be button OR any ele that click.
	ajaxRequest.chkDisplayName = function($target_btn, input_name){

		var $input = $('input[name="'+ input_name +'"]');

		$target_btn.click(function(e){

			e.preventDefault();

			var s = $input.val();

			var p = $input.closest('form').find('input[name="cmd"]').val();
			var r = $input.closest('form').find('input[name="recordid"]').val();

			$input.parent().find(".chkDisplayName-msg.file_msg").remove();

			if(s==='' && !$input.parent().find('.chkDisplayName-msg.file_msg').length){}

			var frm = new FormData();
				frm.append('cmd', 'chkDisplayName');
				frm.append('source', s);
				frm.append('onpage', p);
				frm.append('recordid', r);

			if(s !==''){
				$.ajax({
					url: siteSetting.ajaxurl,	// Url to which the request is send
					type: "POST",             	// Type of request to be send, called as method
					dataType: 'html',
					timeout: 600000,
					data: frm, 					// Data sent to server, a set of key/value pairs (i.e. form fields and values)
					contentType: false,       	// The content type used when sending data to the server.
					cache: false,             	// To unable request pages to be cached
					processData:false,        	// To send DOMDocument or non processed data file it is set to false
					success: function(data)   	// A function to be called if request succeeds
					{
						var data = data ? JSON.parse(data) :'';
						var msgType = data.result ? 'success' :'danger';

						if($input.parent().find('.file_msg').length){
							$input.parent().find('.file_msg').remove();
						}

						if($input.hasClass("flexibled")){
							$input
								.closest(".flexibled-error")
								.find("#for-display_name")
								.html('<div class="chkDisplayName-msg file_msg">'+ data.msg +'</div>');

						} else {
							$input.after('<div class="chkDisplayName-msg file_msg">'+ data.msg +'</div>');
						}

					},
					error: function (responseData, textStatus, errorThrown) {
						console.log( textStatus );
					}
				});
			}
		});
	}

	// set evt of cusAjax - for none ajax-table list
	if($(".cusAjax").length){
		var func = $(".cusAjax").data("func");
		var input_name = $(".cusAjax").data("input");

		ajaxRequest[func]($(".cusAjax"), input_name);
	}

	// setEvtFunction - 0=cmd, 1=tn, 2=r
	// for ajax-table list - with no interact/ return html to page
$(function(){
	$(".chosen-select").chosen({
		width: '100%',
		no_results_text: "Oops, មិនមានទិន្នន័យ ]&#10139; ",
	});
});

	function setAjaxFunction(){
		$(".customEvt").unbind("click").click(function(e){

			var s = $(this).data('source').split(','); /*vary from one another*/
			var a = $(this).data('active');
				a = typeof a !=='undefined' ? a :'';
			var t = $(this).data('toggle');
				t = typeof t !=='undefined' ? t :'';
			var r = $(this).data('reload');
				r = typeof t !=='undefined' ? r :'';
			


			if(s[0].trim() =='remove') {

				$.confirm({
				    title: '<i class="glyphicon glyphicon-trash"></i> <span class="fnt_koulen error">បញ្ជាក់</span>',
				    content: 'អ្នកកំពុងស្នើសុំ <span class="info fnt_koulen font-16">លុប</span> ទិន្នន័យនេះ, ប្រាកដទេ ?',
				    autoClose: 'cancel|8000',
				    buttons: {
				        ok: {
				            text: "ok!",
				            btnClass: 'btn-primary',
				            keys: ['enter'],
				            action: function(){
				            	if(s.length ==3)
				                	ajaxRequest.ajaxFunction(s[0].trim(), s[1].trim(), s[2].trim());
				               	else if (s.length ==4)
				               		ajaxRequest.ajaxFunction(s[0].trim(), s[1].trim(), s[2].trim(), s[3].trim());
				            }
				        },
				        cancel: function(){}
				    }
				});

			} else if(s[0].trim() =='deactivate' && t=='usr') {

				$.confirm({
				    title: '<i class="glyphicon glyphicon-transfer"></i> <span class="fnt_koulen error">បញ្ជាក់</span>',
				    content: 'អ្នកកំពុងស្នើសុំ <span class="info fnt_koulen font-16">'+ (a=='active'? 'បិទដំណើរការ' :'ដាក់ដំណើរការ') +'</span> ទិន្នន័យនេះ, បន្ដ ?',
				    buttons: {
				        ok: {
				            text: "ok!",
				            btnClass: 'btn-primary',
				            keys: ['enter'],
				            action: function(){
				                // NEED TO PUT TOP OF De-activate -- process for message (email) to user
				                ajaxRequest.ajaxFunction('userActivatedMail', s[1].trim(), s[2].trim());

				                // show only in data table -deactivate
				                ajaxRequest.ajaxFunction(s[0].trim(), s[1].trim(), s[2].trim());
				            }
				        },
				        cancel: function(){}
				    }
				});

			} else {
				if(s.length ==3){
					ajaxRequest.ajaxFunction(s[0].trim(), s[1].trim(), s[2].trim());
					if(r==1) $(".btn_search").trigger("click");
					
				}
				else if(s.length ==4){
					ajaxRequest.ajaxFunction(s[0].trim(), s[1].trim(), s[2].trim(), s[3].trim());	
					if(r==1) $(".btn_search").trigger("click");				
				}
			}
		});
	}

	// switch status active / deactive
	ajaxRequest.ajaxFunction = function(cmd, tn, r, obj){

		// start loading overlay
		loading_overlay('alt-');

		var frm = new FormData();
			frm.append('cmd', cmd);
			frm.append('tn', tn);
			frm.append('r', r);

			if(typeof obj !='undefined')
				frm.append('obj', obj);

		$.ajax({
			url: siteSetting.ajaxurl,	// Url to which the request is send
			type: "POST",             	// Type of request to be send, called as method
			dataType: 'html',
			timeout: 600000,
			data: frm, 					// Data sent to server, a set of key/value pairs (i.e. form fields and values)
			contentType: false,       	// The content type used when sending data to the server.
			cache: false,             	// To unable request pages to be cached
			processData:false,        	// To send DOMDocument or non processed data file it is set to false
			success: function(data)   	// A function to be called if request succeeds
			{
				var data = data ? JSON.parse(data) :'';

				// trigger search-btn
				if(['deactivate', 'remove'].indexOf(cmd ) >-1){
					$(".btn_search").trigger("click");

				} else if(data && 'html' in data && $("#returnHtml").length){
					$("#returnHtml").html(data['html']);
				}

				// remove loading overlay
				remove_overlay();
			},
			error: function (responseData, textStatus, errorThrown) {
				console.log(textStatus);
			}
		});
	}


	// assign event to form submit
	if($(".ajaxfrm").length){
		$(".ajaxfrm").each(function(){

			var id_parts = $(this).attr('id').split('-');

			$(this).submit(function(e){

				//get which button submit is click.
				var clicked = document.activeElement.getAttribute('name');

				$(this).find(':submit').prop("disabled", true);

				var msg_ele = $("#"+ id_parts[0] +"_msg");
					// msg_ele.html(jalert('info', msg_ele.data('loadtxt')));

				if(id_parts[0]=='login'){
					ajaxRequest.login($(this));
				}else{

					/* init. loading ovelay */
					loading_overlay('alt-');

					ajaxRequest.saveData($(this), clicked);
				}

				e.preventDefault();
			});
		});
	}


	runResult.submit_form = function(frm, data){

		var frmid = frm.attr('id').split('-'),
			frmreset = frm.attr('data-reset'),
			frmreload = frm.attr('data-reload');

		frm.find(':submit').prop("disabled", false);
		var formName = frmid[0];

		if('url' in data && data.url !=''){
			setTimeout(function(){
				window.location.href =data.url;
			}, 3000);
		}

		if('popup' in data && data.popup.title && data.popup.content){
			$.confirm({
			    title: data.popup['title'],
			    content: data.popup['content'],
			    buttons: {
			        ok: {
			            text: "ok!",
			            btnClass: 'btn-primary',
			            keys: ['enter']
			        }
			    }
			});
		}

		if('action' in data && data.action !=null){
			$.each(data.action, function(pind, pval){
				switch(pval.name){
					case 'show-form':
						$.each(pval.value.split(","), function(ind, val){
							if($("form#"+ val.trim()).length){
								$("form#"+ val.trim()).removeClass("hidden");
							}
						});
						break;
					case 'hide-form':
						$.each(pval.value.split(","), function(ind, val){
							if($("form#"+ val.trim()).length){
								$("form#"+ val.trim()).addClass("hidden");
							}
						});
						break;
					default: break;
				}
			});
		}

		if(data.result){

			// $("#"+ formName +"_msg").html(data.msg);
			// $("#"+ formName +"_msg").html(data.msg);
			if(data.custom_result==true){
				custom_loading_saved(data.msg);

			}else{
				loading_saved();	

			$('#'+ frm.attr('id') +" .file_msg").remove();

			if(frmreset==1){ frm.trigger('reset'); }
			if(frmreload==1){ setTimeout(function(){ location.reload(); }, 700); }
			}



		}else{

			if('err_fields' in data && data.err_fields !='undefined'){
				$.each(data.err_fields, function(index, value){

					var msg_class ='file_msg fnt_light margin-top-5';

					$("#"+frm.attr('id')+" select[name='"+value.name+"']").css({border:'1px solid red'}); /* select */
					$("#"+frm.attr('id')+" select[name='"+value.name+"\\[\\]']").css({border:'1px solid red'}); /* select [] */

					if(
						$("#"+frm.attr('id')+" select[name='"+value.name+"']").is('[class*="flexibled"]') ||
						$("#"+frm.attr('id')+" select[name='"+value.name+"\\[\\]']").is('[class*="flexibled"]')
					){
						$("#"+frm.attr('id')+" select[name='"+value.name+"']")
							.closest('.flexibled-error')
							.find('#for-'+value.name)
							.append('<div class="'+ msg_class +'">'+value.msg+'</div>');

						$("#"+frm.attr('id')+" select[name='"+value.name+"\\[\\]']")
							.closest('.flexibled-error')
							.find('#for-'+value.name)
							.append('<div class="'+ msg_class +'">'+value.msg+'</div>');

					}else if(
						$("#"+frm.attr('id')+" select[name='"+value.name+"']").is('[class*="chosen-select"]') ||
						$("#"+frm.attr('id')+" select[name='"+value.name+"\\[\\]']").is('[class*="chosen-select"]')
					){
						$("#"+frm.attr('id')+" select[name='"+value.name+"']")
							.parent().append('<div class="'+ msg_class +'">'+value.msg+'</div>');

						$("#"+frm.attr('id')+" select[name='"+value.name+"\\[\\]']")
							.parent().append('<div class="'+ msg_class +'">'+value.msg+'</div>');

					}else{
						$("#"+frm.attr('id')+" select[name='"+value.name+"']")
							.after('<div class="'+ msg_class +'">'+ value.msg +'</div>');
						$("#"+frm.attr('id')+" select[name='"+value.name+"\\[\\]']")
							.after('<div class="'+ msg_class +'">'+ value.msg +'</div>');
					}


					/* input */
					$("#"+frm.attr('id')+" input[name='"+value.name+"']").css({border:'1px solid red'});

					if($("#"+frm.attr('id')+" input[name='"+value.name+"']").is('[class*="datetime"]')){
						$("#"+frm.attr('id')+" input[name='"+value.name+"']")
							.parent().after('<div class="'+ msg_class +'">'+value.msg+'</div>');

					}else if($("#"+frm.attr('id')+" input[name='"+value.name+"']").is('[class*="inputfile"], [class*="checkbox"], [class*="radio"]')){

						/* .inputfile with file_realTimeUpload. */
						if($("#"+frm.attr('id')+" input[name='"+value.name+"']").hasClass('inputfile')){
							$("#"+frm.attr('id')+" input[name='"+value.name+"']")
								.closest('.flexibled-error')
								.find('#for-'+ value.name )
								.append('<div class="'+ msg_class +'">'+value.msg+'</div>');

						} else {
							$("#"+frm.attr('id')+" input[name='"+value.name+"']")
								.closest('label').append('<div class="'+ msg_class +'">'+value.msg+'</div>');
						}

					}else if($("#"+frm.attr('id')+" input[name='"+value.name+"']").is('[class*="flexibled"]')){
						$("#"+frm.attr('id')+" input[name='"+value.name+"']")
							.closest('.flexibled-error').find('#for-'+value.name)
							.append('<div class="'+ msg_class +'">'+value.msg+'</div>');

					}else {
						/* normal input */
						$("#"+frm.attr('id')+" input[name='"+value.name+"']")
							.after('<div class="'+ msg_class +'">'+value.msg+'</div>');
					}

					/* textarea */
					$("#"+frm.attr('id')+" textarea[name='"+value.name+"']").css({border:'1px solid red'});

					if($("#"+frm.attr('id')+" textarea[name='"+value.name+"']").is('[class*="g-recaptcha-response"]')){
						/* reCaptcha */
						var $grecaptcha = $("#"+frm.attr('id')+" textarea[name='"+value.name+"']").closest('.g-recaptcha');

						if($grecaptcha.hasClass("flexibled")){
							$("#"+frm.attr('id')+" textarea[name='"+value.name+"']")
								.closest('.g-recaptcha')
								.closest('.flexibled-error').find('#for-'+value.name)
								.append('<div class="'+ msg_class +'">'+value.msg+'</div>');
						} else {
							$("#"+frm.attr('id')+" textarea[name='"+value.name+"']")
								.parent().after('<div class="'+ msg_class +'">'+value.msg+'</div>');
						}

					} else if($("#"+frm.attr('id')+" textarea[name='"+value.name+"']").is('[class*="flexibled"]')){
						/* tinyMCE */
						$("#"+frm.attr('id')+" textarea[name='"+value.name+"']")
							.closest('.flexibled-error').find('#for-'+value.name)
							.append('<div class="'+ msg_class +'">'+value.msg+'</div>');

					} else {
						/* normal textarea */
						$("#"+frm.attr('id')+" textarea[name='"+value.name+"']")
							.after('<div class="'+msg_class+'">'+value.msg+'</div>');
					}
				});
			}

			// $("#"+frm.attr('id')+" #"+formName+"_msg").html(data.msg);
			loading_error(data.msg);
		}
	};


	ajaxRequest.saveData = function(frm, active_btn){

		var frmid =frm.attr('id').split('-');
		var formName = frmid[0];
		var $frm = frm; // required

		var myfrm = new FormData($("#"+ frm.attr('id'))[0]);

		/* add button submit name if have more than one button. */
		active_btn = typeof active_btn !=undefined ? active_btn : '';
		myfrm.append('active_btn', active_btn);

		/* check if have files input type */
		if($(".typeFile").length){
			$allFile = $frm.find(".typeFile")[0].files;
			myfrm.append('files', $allFile );
		}

		/* add csrf token */
		if('def' in window){ myfrm.append('token', window.def.csrf); }
		if(typeof local!='undefined'){ myfrm.append('local', local); }

		/* tinyMCE.triggerSave(); */

		// $("#"+ formName +"_msg").html(jalert('success', $("#"+ formName +"_msg").data('loadtxt')));

		$('#'+ frm.attr('id') +' input, #'+ frm.attr('id') +' select, #'+ frm.attr('id') +' textarea').css({
			border:'1px solid #5ccf65'
		});

		if($('#'+ frm.attr('id') +" .file_msg").length){
			$('#'+ frm.attr('id') +" .file_msg").remove();
		}

		$.ajax({
			url: siteSetting.ajaxurl,	// Url to which the request is send
			type: "POST",             	// Type of request to be send, called as method
			dataType: 'html',
			timeout: 600000,
			data: myfrm, 				// Data sent to server, a set of key/value pairs (i.e. form fields and values)
			contentType: false,       	// The content type used when sending data to the server.
			cache: false,             	// To unable request pages to be cached
			processData:false,        	// To send DOMDocument or non processed data file it is set to false
			success: function(data)   	// A function to be called if request succeeds
			{
				var data = is_json(data) ? JSON.parse(data) :'';

				if(data !=''){
					if(data && 'html' in data && $("#returnHtml").length){
						$("#returnHtml").html(data['html']);
					}

					if(frm.attr("data-func")){
						formName = frm.attr("data-func");
					}

					runResult[formName](frm, data);

				} else {
					frm.find(':submit')
						.prop("disabled", false)
						.removeAttr("disabled");
				}
			},
			error: function (responseData, textStatus, errorThrown) {
				$("#"+ formName +"_msg").html(textStatus);
				frm.find(':submit')
					.prop("disabled", false)
					.removeAttr("disabled");
			}
		});
	};


	ajaxRequest.login= function(frm){

		var formName = 'login';
		$("#"+formName+"_msg").html(jalert('success', $("#"+formName+"_msg").data('loadtxt')));

		var username = $("input[name='username']").val(),
			password = $("input[name='password']").val(),
			remember = $("input[name='remember']").val(),
			token = $("input[name='token']").val();

		$.post(siteSetting.loginurl,
			{
				username:username,
				password:password,
				remember:remember,
				token:token,
				lang:siteSetting.language
			},
			function(data){

				var data = data ? JSON.parse(data) :'';

				if(data !=''){

					$("#login_btn_icon").html('<i class="fa fa-key fa-fw"></i>');

					if(data.result){
						$("#"+ formName +"_msg").html(data.msg);
						window.location.href =data.url;

					}else{
						$("#"+ formName +"_msg").html(data.msg);
						frm.find(':submit')
							.prop("disabled", false)
							.removeAttr("disabled");
					}
				}
			});
	};


	ajaxRequest.listNav = function(cmd, data){

		/* check query data */
		if($("#"+cmd+" .searchinputs").length){
			$( "#"+cmd+" .searchinputs" ).each(function() {
				data[$( this ).attr('id')] = $(this).val();
			});
		}

		/* Start navigation btn */
		$("#"+cmd+" .nav_first").unbind('click').click(function(e){ajaxRequest.showList('first', cmd, data);});
		$("#"+cmd+" .nav_prev").unbind('click').click(function(e){ajaxRequest.showList('prev', cmd, data);});
		$("#"+cmd+" .nav_next").unbind('click').click(function(e){ajaxRequest.showList('next', cmd, data);});
		$("#"+cmd+" .nav_last").unbind('click').click(function(e){ajaxRequest.showList('last', cmd, data);});
		$("#"+cmd+" .nav_rowsPerPage").unbind('change').change(function(e){ajaxRequest.showList('', cmd, data);});
		$("#"+cmd+" .nav_currentPage").unbind('change').change(function(e){ajaxRequest.showList('goto', cmd, data);});

		ajaxRequest.showList('', cmd, data);
	}


	ajaxRequest.showList= function(navAction, cmd, data){

		$("#"+cmd+" .nav_info").html('<span>'+$("#"+cmd+" .nav_info").data('loadtxt')+'</span>');

		var currentPage = $("#"+cmd+" .nav_currentPage").val(),
			rowsPerPage = $("#"+cmd+" .nav_rowsPerPage").val();

		/* store rowPerpage. */
		Cookies.set('rowPerpage', rowsPerPage, { expires: 7, path: '/' });

		$.post(siteSetting.ajaxurl,
			{
				cmd:cmd,
				qryData:data,
				currentPage:currentPage,
				rowsPerPage:rowsPerPage,
				navAction:navAction,
				token:window.def.csrf

			}, function(data){

				var data = JSON.parse(data);

				/* check if invalid token | usersession */
				if('result' in data && !data.result){ return; }


				$("#"+ cmd +" tbody").html(data.list);
				$("#"+ cmd +" .nav_currentPage").val(data.targetPage);

				if(navAction=='refresh' || navAction==''){

					$("#"+cmd+" .nav_currentPage").empty();

					$.each(data.gotoSelectNum, function(key, value) {
						$("#"+cmd+" .nav_currentPage").append($("<option></option>").attr("value",key).text(value));
					});
				}

				$("#"+cmd+" .nav_info").html(data.listNavInfo);

				if($(".customEvt").length){ setAjaxFunction($(this) ); }

				$.each(data.nav_btn_disable, function (key, jdata) {

					if(jdata==1){
						$("#"+cmd+" ."+key).removeClass('disabled');

					}else{
						$("#"+cmd+" ."+key).addClass('disabled');
					}
				});
			}
		);
	};


	/* assign event to table */
	if($(".datalist").length){
		$( ".datalist" ).each(function() {

			var tblid = $( this ).attr('id');
			var qryData = totalcol(tblid);

			if($(".searchinputs").length){
				$( ".searchinputs" ).each(function() {$( this ).change(function(e){ajaxRequest.listNav(tblid,qryData);});});
				$( ".btn_search" ).each(function() {$( this ).click(function(e){ajaxRequest.listNav(tblid,qryData);});});
			}

			ajaxRequest.listNav(tblid, qryData);
		});
	}
});







