/**
 * เป็น Plugin ที่ใช้ report error เข้าสู่ระบบ โดยมันจะเริ่มโดยการ bind window.onerror เพื่อที่จะ catch javascript error โดยอัตโนมัติ นั้นก็คือเรียกขึ้นมาเฉยๆ ได้เลย
 * ส่วน method  $(window).data("SendError")( errData ) ก็จะสามารถใช้ส่ง error ได้โดยตอนนี้เราคิดว่าจะเอาไปรวมกับการ send Error ที่เราส่งผ่าน error page ซึ่งอาจจะมีปัญหาเยอะ
 * แล้วก็มาใช้ตัวนี้แทนไปเลย
 * ค่า errData ที่ส่งไป SendError นั้นมี Default ดังนี้
 * 					'errType':'unknow',
					'errSubject':'unknow', //ตัวนี้จะใช้เป็นตัวที่จะบอกว่า script ว่าหากมีการ loop มาส่ง erorr subject เดิมมันจะไม่ให้ส่งแล้วภายในเวลา 1 นาที
					'errMsg':'unknow',
					'errUrl':'unknow',
					'windowUrl':$(location).attr('href')
 */
(function($) {
	$.fn.myErrorReport = function(custom_conf){
		var conf = {
				'errorReportUrl':'http://www.beautyintrend.com/module/ajax/myErrorReport.php'				
		};
		if (custom_conf) $.extend(conf, custom_conf);
		this.each(function(){
			$(this).data("conf",conf);
			var $winObj = $(window);
			$winObj.data('lastSendTime',{});
			myER_makeBuildInFunction($winObj);
			$winObj.data("addHandler")(window);
		});
		function myER_makeBuildInFunction($winObj){
			$winObj.data("SendError",function(data,autoRedirect){
				var errData = {
					'errType':'unknow',
					'errSubject':'unknow',  //ตัวนี้จะใช้เป็นตัวที่จะบอกว่า script ว่าหากมีการ loop มาส่ง erorr subject เดิมมันจะไม่ให้ส่งแล้วภายในเวลา 1 นาที
					'errMsg':'unknow',
					'errUrl':'unknow',
					'windowUrl':$(location).attr('href')
				};
				$.extend(errData,data);
				var myDate = new Date();
				var tm = myDate.getTime()/1000;
				if( $winObj.data("lastSendTime")[ errData['errSubject'] ] + 15 > tm ){ //หากมี error ติดๆกันมันจะไม่ส่ง error ซ้ำซ้อน
					return false;
				}
				$winObj.data("lastSendTime")[ errData['errSubject'] ] = tm;
				$.ajax({
					url: $winObj.data("conf")['errorReportUrl'],
					global: false,
					type: "POST",
					data: (errData),
					dataType: "html",
					async:true,
					success: function(msg){						
						var regexpShowMsg = /^showReturnMsg=([\s\S]+)/mi;
						var rt = regexpShowMsg.exec(msg);
						if( rt !== null && rt[1] != "" ){ alert( rt[1] ); }
						if( autoRedirect === true ){ window.location = "/index_.php?module=intErrPage"; }
					},
					error: function(XMLHttpRequest, textStatus, errorThrown){						
					}
				});
			});
			$winObj.data("addHandler",function(win){ //method ที่ทำหน้าที่จับ javascript error ภายใน page
				win.onerror = function(msg, err_url, line){
					var errData = {'errType':'javascript','errSubject':msg,'errMsg':msg,'errUrl':err_url,'line':line};
					$winObj.data("SendError")(errData);
				};				
			});
		}
	};
})(jQuery);
$(window).myErrorReport();
