/*********************************************************************************************
@file : func.js
@auth : LBCSoft
@date : 2015-09-09
@desc : 공통 함수
function callService(o)         : Ajax로 Service 호출
function callServiceForm(o)     : Ajax Form Submit
function errCallback(obj)       : 기본 에러 콜백
function addZero(target)        : 0을 붙여 두자리수로 만들어주는 함수 (날짜형식에 사용)
function showLoaderAll(display) : 페이지 전체를 가리는 로딩 DIV 표출
*********************************************************************************************/
if(window.console) {}
var loadingbar;
/**
 * 엔터키 입력시 submit 안되게
 */
$("#mainForm").bind("keyup keypress", function(e) {
	var code = e.keyCode || e.which; 
	if (code  == 13) {               
		e.preventDefault();
		return false;
	}
});
/**
 * Ajax로 Service 호출
 * @param o : url(필수), param(파라미터 값), callback(필수), errCallback(사용자 정의 에러콜백), type(GET, POST)
 */
function callService(o) {
	return $.ajax({
		
		type     : nvl(o.type, "POST"),
		url		 : CONTEXTROOT + "/" + o.url,
		data 	 : o.param,
		dataType : "json",
		//contentType:"application/json; charset=utf-8",
		cache	 : false,
		async    : o.async == undefined ? true : o.async,
		success  : o.callback,
		error    : nvl(o.errCallback, errCallback)
	});
}

/**
 * Ajax Form Submit
 * @param o
 */
function callServiceForm(o) {
	// Ajax Form 전송
	$("#" + o.formName).ajaxSubmit({
		
		type        : "POST",
		url		    : CONTEXTROOT + "/" + o.url,
		data 	    : $(this).serialize(),
		dataType    : "json",
		cache	    : false,
		async       : o.async == undefined ? true : o.async,
		success     : o.callback,
		error       : nvl(o.errCallback, errCallback)
	});
}

/**
 * target 문자열이 null이면 대체문자열로 치환
 * @param target
 * @param replace
 * @returns {String}
 */
function nvl(target, replace) {
	
	// return할 값
    var str = "";
    
    try {
    	
    	// target문자열 앞뒤 공백제거
    	var strr = $.trim(target);
    	
    	// null이면 대체문자열로 retun
    	if(!strr || strr == null || strr == "" || strr == "null" || strr == "undefined" || strr == undefined || strr == "") {
    		
    		str = replace;
    	}
    	
    	// 아닌 경우 원래문자열 return
    	else {
    		
    		str = target;
    	}
    }
    
    catch(err) {
    	
    	str = replace;
    }
    
    return str;
}

/**
 * 기본 에러 콜백
 */
function errCallback(obj) {
	
	// 상태
	var status = Number(nvl(obj.status, "404"));
	
	// URL이 없는 경우
	if(status == 404) {
		
		alert("일시적 장애로 재구동 합니다.");
		location.href = CONTEXTROOT + "/sample.jsp";
	}
	// 에러발생
	else {
		//alert("요청하신 기능이 잘못되었습니다.");
	}
	
	// 로딩 없애기
	showLoaderAll(false);
}

/**
 * 페이지 전체를 가리는 로딩 DIV 표출
 * @param display
 */
function showLoaderAll(display) {
	
	// 보이기
	if(display == true) {
		loadingbar = new ajaxLoader("body", {classOveride: 'blue-loader', bgColor: '#FFF', opacity: '0.5', innerHtml: 'Loading WebRTC CCTV'});
	}
	
	// 숨기기
	else {
		if (loadingbar) loadingbar.remove();
	}
}
/**
 * 팝업창 열기
 * @param o
 */
function openPopup(o) {
	
	// 팝업위치 계산
	var l          = (Number(screen.availWidth) - Number(nvl(o.width, "500"))) / 2;
	var t          = (Number(screen.availHeight) - Number(nvl(o.height, "500"))) / 2;
	
	// 팝업 화면 위치
	var left       = l > 0 ? l : 0;
	var top        = t > 0 ? t : 0;
	
	// 팝업옵션
	var popOption  = "width=" + o.width + "px,";
		popOption += "height=" + o.height + "px,";
		popOption += "left=" + left + "px,";
		popOption += "top=" + top + "px,";
		popOption += "menubar=no,";
		popOption += "status=no,";
		popOption += "toolbar=no,";
		popOption += "scrollbars=no,"
		popOption += "resizable=no,";
		popOption += "location=no";
		
	// form객체
	var f          = null;
	
	// 팝업 부모창 ID 세팅(필수값)
	var input      = null;
	
	f     = parent.document.frmPopup;
	$("#frmPopup", window.parent.document).empty();
	input = parent.document.createElement("input");
	
	input.type     = "hidden";
	input.name     = "popup";
	input.value    = o.popSvcId;
	
	f.insertBefore(input, null);
	
	// 파라미터가 있는 경우에만 실행
	if(o.param != undefined) {
		
		// form안에 파라미터 input 생성
		for(var p in o.param) {
			
			// 파라미터 Input box 동적생성
			var input   = parent.document.createElement("input");
			
			input.type  = "hidden";
			input.name  = p;
			input.value = o.param[p];
			
			f.insertBefore(input, null);
		}
	}
	
	// 팝업창 열기
	var pop        = window.open("", o.popName, popOption);
	
	// 팝업창 포커스 주기
	pop.focus();
		
	try { parent.popupArray.push(pop); } catch(err) { popupArray.push(pop); }
	// form 속성 세팅
	f.action       = o.popURL;
	f.method       = "POST";
	f.target       = o.popName;
	
	// 팝업창에 submit하기
	f.submit();
}
/**
 * 전체 팝업 닫기 함수
 */
function popupArrayClose() {
	// 팝업 개수
	var len = popupArray.length;
	
	// 개수 만큼 반복문 돌면서 팝업 닫기
	for(var i = 0 ; i < len ; i++) {
		
		// 팝업창 변수 얻기
		var pop = popupArray[i];
		
		// 팝업창 닫기
		if(pop != null) { pop.close(); }
	}
	
	popupArray = new Array();
}
/**
 * 문자열의 길이를 반환
 * @param str
 * @returns {Number}
 */
function fnStrlen(str) {
	
	var rLen = 0;
	
	var pLen = str.length;
	
	for(var i=0; i < pLen; i++) {
    
		rLen += (str.charCodeAt(i) > 128) ? 2 : 1;
	}
	
	return rLen;
}
/**
 * 문자열 자르기
 * @param str
 * @param start
 * @param size
 * @returns
 */
function fnSubString(str, start, size) {
	
  var fnStart 	= 0;
  var fnPos 	= 0;
  var strLim 	= 0;
  var result 	= "";
  var rLen 		= fnStrlen(str);	// 문자열의 길이
  var result = str;
  
  // 문자열 시작 위치
  for(var a = 0; fnPos < start; a++, fnStart++) {
	  
	  fnPos += (str.charCodeAt(a) > 128) ? 2 : 1;
  }
  
  // 문자열의 시작 위치부터 자르기
  for (var b = fnStart; b < rLen; b++) {
	  
	 strLim += (str.charCodeAt(b) > 128) ? 2 : 1;
  	 
	 if (strLim > size) { 
		 
		result = str.substring(fnStart, b);    
		
		return result + "..";
	}
  }
  
  return result;
}

function setCookie(cname, cvalue, exdays) {
    var d = new Date();
    d.setTime(d.getTime() + (exdays*24*60*60*1000));
    var expires = "expires="+ d.toUTCString();
    document.cookie = cname + "=" + cvalue + ";" + expires + ";path=/";
}
function getCookie(cname) {
    var name = cname + "=";
    var ca = document.cookie.split(';');
    for(var i = 0; i <ca.length; i++) {
        var c = ca[i];
        while (c.charAt(0)==' ') {
            c = c.substring(1);
        }
        if (c.indexOf(name) == 0) {
            return c.substring(name.length,c.length);
        }
    }
    return "";
}

function detectIE() {
    var ua = window.navigator.userAgent;

    var msie = ua.indexOf('MSIE ');
    if (msie > 0) {
        // IE 10 or older => return version number
        return true;
    }

    var trident = ua.indexOf('Trident/');
    if (trident > 0) {
        // IE 11 => return version number
        var rv = ua.indexOf('rv:');
        return true;
    }

    var edge = ua.indexOf('Edg/');
    if (edge > 0) {
       // Edge (IE 12+) => return version number
       return false;
    }

    // other browser
    return false;
}

function detectSafari(){
	return /^((?!chrome|android).)*safari/i.test(navigator.userAgent);
}

function detectIOS(){
	return navigator.userAgent.indexOf('iPhone') != -1 || navigator.userAgent.indexOf('iPod') != -1 || navigator.userAgent.indexOf('iPad') != -1;
}

function sigMapBoxClose()
{
	$('.sigInfoBox').hide();
}