

//<script type="text/html" id="region-detail-template">
//<option rel='region-detail' value="{{regionDetailIdx}}">{{regionDetailName}}</option>
//</script>

function hsCustomBuilder(){
	return {
		build : function(){
			var hsCustom = {
				getUrlParam : function(name){return getUrlParam(name)},
				getUrlParamList : function(name){return getUrlParamList(name)},
				getAllUrlParam : function(){return getAllUrlParam()},
				getItemHTML : function(templateSrc, data){return getItemHTML(templateSrc, data)},
				validation : function(formData){return validation(formData)}
			}
			return hsCustom;
		}
	}
}

function hsAjaxBuilder(){
	let csrfToken,
		csrfHeader;
	
	return {
		setCsrf : function(csrfHeader, csrfToken) {
			this.csrfToken = csrfToken;
			this.csrfHeader = csrfHeader;
			return this;
		},
		build : function(){
			var optionSet = {
					csrfToken : this.csrfToken,
					csrfHeader : this.csrfHeader
			}

			return {
				get : function(url, successFunction){return get(url, successFunction)},
				post : function(url, sendData, successFunction){return post(url, sendData, successFunction, optionSet.csrfHeader, optionSet.csrfToken)}
			}
		}
	}
}

function get(url, successFunction) {
	$.ajax({
		type : "get",
		url  : url,
		dataType: "json",
		contentType:"application/json;charset=UTF-8",
		success : function(data){
			successFunction(data)
		}
	})
}

function post(url, sendData, successFunction, csrfHeader, csrfToken) {
	$.ajax({
		type : "post",
		url  : url,
		beforeSend : function(xhr){
	           xhr.setRequestHeader(csrfHeader, csrfToken);
	    },
		data : JSON.stringify(sendData),
		dataType: "json",
		contentType:"application/json;charset=UTF-8",
		success : function(data){
			successFunction(data)
		}
	})
}

// validation
function validation(formData) {
    var validationFlag = true;
	
    for(key in formData) {
    	//공백 확인
    	if(formData[key].value.length == 0) {
	    	swal('데이터 입력 확인','누락된 양식이 있습니다 : ' + formData[key].message,'info');
	    	validationFlag = false;
	    	break;
    	}

    	//정규식 확인
    	if(formData[key].regExp != null) {
	    	if(!formData[key].regExp.test(formData[key].value)){
		    	swal('잘못된 입력','잘못된 입력입니다. 다시 확인해 주십시오 : ' + formData[key].message, 'info');
		    	validationFlag = false;
		    	break;
	    	}
    	}
	}

	return validationFlag;
}

//Get Parameter
function getUrlParam(name){
    var results = new RegExp('[\?&]' + name + '=([^&#]*)').exec(window.location.href);
    if (results==null) {
       return null;
    }
    return decodeURI(results[1]) || 0;
}

//Get Parameter List
function getUrlParamList(name){
    var sPageURL = decodeURIComponent(window.location.search.substring(1)),
    sURLVariables = sPageURL.split('&'),
    sParameterName;

	var result = [];
	
	for (i = 0; i < sURLVariables.length; i++) {
	    sParameterName = sURLVariables[i].split('=');
	    
	    if(sParameterName[0] === name) {
	    	result.push(sParameterName[1])
	    }
	}
	return result;
}

function getAllUrlParam() {
    var sPageURL = window.location.search.substring(1);
    var sURLVariables = sPageURL.split('&');
    var result = [];

    for(key in sURLVariables) {
    	if(sURLVariables[key] !== "") {
    		result.push(sURLVariables[key]);
    	}
    }

    return result;
};

//템플릿 변수 적용 Html 가져오기
function getItemHTML(templateSrc, data) {
    return microTemplate( templateSrc, data );
}

//변수 치환
function microTemplate( src, data ) {
    // replace {{tags}} in source
    return src.replace( /\{\{([\w\-_\.]+)\}\}/gi, function( match, key ) {
    	
        // walk through objects to get value
        var value = data;
        key.split('.').forEach( function( part ) {
        	value = value[ part ];
    	});
	    return value;
	});
}	
	
//모바일 에이전트 구분
var isMobile = {
	Android: function () {
		return navigator.userAgent.match(/Android/i) == null ? false : true;
	},
	BlackBerry: function () {
		return navigator.userAgent.match(/BlackBerry/i) == null ? false : true;
	},
	IOS: function () {
		return navigator.userAgent.match(/iPhone|iPad|iPod/i) == null ? false : true;
	},
	Opera: function () {
		return navigator.userAgent.match(/Opera Mini/i) == null ? false : true;
	},
	Windows: function () {
		return navigator.userAgent.match(/IEMobile/i) == null ? false : true;
	},
	Any: function () {
		return (isMobile.Android() || isMobile.BlackBerry() || isMobile.IOS() || isMobile.Opera() || isMobile.Windows());
	}
};

// 현재 시간값을 hh:mm 형식으로 변환해주는 함수
Date.prototype.hhmm = function() {
	var hh = this.getHours().toString();
	var mm = this.getMinutes().toString();
	return (hh[1] ? hh : "0" + hh[0]) + ":" + (mm[1] ? mm : "0" + mm[0]);
}
//현재 날짜값을 yyyy-mm-dd 형식으로 변환해주는 함수
Date.prototype.yyyymmdd = function(separator) {
	if(!separator) {
		separator = ".";
	}
	var mm = this.getMonth() + 1; // getMonth() is zero-based
	var dd = this.getDate();
	return [this.getFullYear(), separator , 
	  (mm>9 ? '' : '0') + mm, separator , 
	  (dd>9 ? '' : '0') + dd
	 ].join('');
};
//현재 날짜값을 mm-dd 형식으로 변환해주는 함수
Date.prototype.mmdd = function(separator) {
	if(!separator) {
		separator = ".";
	}
	var mm = this.getMonth() + 1; // getMonth() is zero-based
	var dd = this.getDate();
	return [
	  (mm>9 ? '' : '0') + mm, separator , 
	  (dd>9 ? '' : '0') + dd
	 ].join('');
};


//현재 시간값을 hh:mm:ss 형식으로 변환해주는 함수
Date.prototype.hhmmss = function() {
	var hh = this.getHours().toString();
	var mm = this.getMinutes().toString();
	return (hh[1] ? hh : "0" + hh[0]) + ":" + (mm[1] ? mm : "0" + mm[0]) + ":" + (ss[1] ? ss : "0" + ss[0]);
}
