﻿
/*
 * Global Javascript Functions, version 1.0.0.0
 *
 * Date : 2009-01-21
 * Copyright 2008-2009 by LH Technology Group. All right reserved.
 *
 * http://www.lh.co.kr/
 *
 */

// jQuery 1.3 - New Wave Javascript
document.write("<script type='text/javascript' src='/js/addon/jquery.js'></script>");

// Prototype JavaScript framework, version 1.6.0.3
document.write("<script type='text/javascript' src='/js/addon/prototype.js'></script>");

/*
 * Expand Javascript Prototype
 *
 * Copyright 2008-2009 by LH Technology Group All right reserved.
 *
 */

//-----------------------------------------------------------------------------
// 문자의 좌, 우 공백 제거
// @Return: String
//-----------------------------------------------------------------------------
String.prototype.trim = function() { return this.replace(/(^\s*)|(\s*$)/g, ""); }

//-----------------------------------------------------------------------------
// 문자의 좌 공백 제거
// @Return: String
//-----------------------------------------------------------------------------
String.prototype.ltrim = function() { return this.replace(/(^\s*)/, ""); }

//-----------------------------------------------------------------------------
// 문자의 우 공백 제거
// @Return: String
//-----------------------------------------------------------------------------
String.prototype.rtrim = function() { return this.replace(/(\s*$)/, ""); }

//-----------------------------------------------------------------------------
// 문자열을 2byte문자를 고려하여 byte 단위로 길이 반환
// @Return: Number
//-----------------------------------------------------------------------------
String.prototype.byte = function() {
  var len = 0;
  for (var i = 0; i < this.length; i++) { len += (this.charCodeAt(i) > 128) ? 2 : 1; }
  return len;
}
//-----------------------------------------------------------------------------
// 주어진 길이의 문자열 반환 - arguments[1] : 줄임기호
// @Return: String
//-----------------------------------------------------------------------------
String.prototype.cut = function(len) {
  var tail = arguments[1] ? arguments[1] : "";
  return (this.substring(0, len) + tail);
}
//-----------------------------------------------------------------------------
// 2byte문자를 고려하여 byte단위로 주어진 길이의 문자열 반환 - arguments[1] : 줄임기호
// @Return: String
//-----------------------------------------------------------------------------
String.prototype.cutByte = function(len) {
  var tail = arguments[1] ? arguments[1] : "";
  var l = 0;
  for (var i = 0; i < this.length; i++) {
    l += (this.charCodeAt(i) > 128) ? 2 : 1;
    if (l > len) return (this.substring(0, i) + tail);
  }
  return this;
}
//-----------------------------------------------------------------------------
// 정수형으로 변환 - arguments[0] : 기수
// @Return: Number
//-----------------------------------------------------------------------------
String.prototype.int = function() {
  var radix = arguments[0] ? arguments[0] : 10;
  var num = null;
  (!isNaN(this)) ? num = parseInt(this, radix) : num = null;
  //(!isNaN(this)) ? num = parseInt(this, radix) : num = this;
  return num;
}
//-----------------------------------------------------------------------------
// 정수형으로 변환
// @Return: Number
//-----------------------------------------------------------------------------
String.prototype.float = function() {
  var num = null;
  (!isNaN(this)) ? num = parseFloat(this) : num = null;
  return num;
}
//-----------------------------------------------------------------------------
// 숫자만 가져 오기 - arguments[0] : 허용할 문자들
// @Return: String
//-----------------------------------------------------------------------------
String.prototype.num = function() {
  var pattern = arguments[0] ? arguments[0] : "";
  var regexp = "[^0-9" + pattern.meta() + "]";
  return this.trim().replace(eval("/" + regexp + "/g"), "")
}
//-----------------------------------------------------------------------------
// 통화 서식 적용 (1000 단위 구분 기호[,]) 를 찍어서 반환
// @Return: String
//-----------------------------------------------------------------------------
String.prototype.money = function() {
  var currency = arguments[0] ? arguments[0] : "";
  var num = this.trim();
  while((/(-?[0-9]+)([0-9]{3})/).test(num)) {
    num = num.replace((/(-?[0-9]+)([0-9]{3})/), "$1,$2");
  }
  return currency + num;
}
//-----------------------------------------------------------------------------
// 숫자의 자리수(cnt)에 맞도록 "0"문자를 추가하여 반환
// @Return: String
//-----------------------------------------------------------------------------
String.prototype.digits = function(cnt) {
  var digit = "";
  if (this.length < cnt) {
    for(var i = 0; i < cnt - this.length; i++) {
      digit += "0";
    }
  }
  return digit + this;
}
//-----------------------------------------------------------------------------
// " -> &#34; ' -> &#39;로 바꾸어서 반환
// @Return: String
//-----------------------------------------------------------------------------
String.prototype.quota = function() {
  return this.replace(/"/g, "&#34;").replace(/'/g, "&#39;");
}
//-----------------------------------------------------------------------------
// 파일 확장자만 가져오기
// @Return: String
//-----------------------------------------------------------------------------
String.prototype.ext = function() {
  return (this.indexOf(".") < 0) ? "" : this.substring(this.lastIndexOf(".") + 1, this.length);
}
//-----------------------------------------------------------------------------
// URL에서 파라메터 제거한 순수한 url 얻기
// @Return: String
//-----------------------------------------------------------------------------
String.prototype.uri = function() {
  var arr = this.split("?");
  arr = arr[0].split("#");
  return arr[0];
}
//-----------------------------------------------------------------------------
// CrLf를 <BR> 태그로 변환하기
// @Return: String
//-----------------------------------------------------------------------------
String.prototype.return2br = function() {
  return this.replace(/(\r\n|[\r\n])/g, "<br />");
}

/* -----------------------------------------------
 *  각종 체크 함수들
 * ----------------------------------------------- */

//-----------------------------------------------------------------------------
// 정규식에 쓰이는 특수문자를 찾아서 이스케이프 한다.
// @Return: String
//-----------------------------------------------------------------------------
String.prototype.meta = function() {
  var str = this;
  var result = ""
  for(var i = 0; i < str.length; i++) {
    if((/([\$\(\)\*\+\.\[\]\?\\\^\{\}\|]{1})/).test(str.charAt(i))) {
      result += str.charAt(i).replace((/([\$\(\)\*\+\.\[\]\?\\\^\{\}\|]{1})/), "\\$1");
    }
    else {
      result += str.charAt(i);
    }
  }
  return result;
}
//-----------------------------------------------------------------------------
// 정규식에 쓰이는 특수문자를 찾아서 이스케이프 한다.
// @Return: String
//-----------------------------------------------------------------------------
String.prototype.remove = function(pattern) {
  return (pattern == null) ? this : eval("this.replace(/[" + pattern.meta() + "]/g, \"\")");
}
//-----------------------------------------------------------------------------
// 최소 최대 길이인지 검증
// @Syntax: stringObject.isLength(min [,max])
// @Return: boolean
//-----------------------------------------------------------------------------
String.prototype.isLength = function() {
  var min = arguments[0];
  var max = arguments[1] ? arguments[1] : null;
  if (min == max) {
    if(this.length != min) {
      return false;
    }
  } else {
    if(min && this.length < min) {
      return false;
    }
    if(max && this.length > max) {
      return false;
    }
  }
  return true;
}
//-----------------------------------------------------------------------------
// 최소 최대 길이(바이트)인지 검증
// @Syntax: stringObject.isByteLength(min [,max])
// @Return: boolean
//-----------------------------------------------------------------------------
String.prototype.isByteLength = function() {
  var min = arguments[0];
  var max = arguments[1] ? arguments[1] : null;
  if (min == max) {
    if(this.byte() != min) {
      return false;
    }
  } else {
    if(min && this.byte() < min) {
      return false;
    }
    if(max && this.byte() > max) {
      return false;
    }
  }
  return true;
}
//-----------------------------------------------------------------------------
// 공백이나 널인지 확인
// @Return: boolean
//-----------------------------------------------------------------------------
String.prototype.isBlank = function() {
  var str = this.trim();
  for(var i = 0; i < str.length; i++) {
    if ((str.charAt(i) != "\t") && (str.charAt(i) != "\n") && (str.charAt(i)!="\r")) {
      return false;
    }
  }
  return true;
}
//-----------------------------------------------------------------------------
// 숫자로 구성되어 있는지 확인 - arguments[0] : 허용할 문자들
// @Return: boolean
//-----------------------------------------------------------------------------
String.prototype.isNum = function() {
  return (/^[0-9]+$/).test(this.remove(arguments[0])) ? true : false;
}
//-----------------------------------------------------------------------------
// 영어만 허용 - arguments[0] : 추가 허용할 문자들
// @Return: boolean
//-----------------------------------------------------------------------------
String.prototype.isEng = function() {
  return (/^[a-zA-Z]+$/).test(this.remove(arguments[0])) ? true : false;
}
//-----------------------------------------------------------------------------
// 숫자와 영어만 허용 - arguments[0] : 추가 허용할 문자들
// @Return: boolean
//-----------------------------------------------------------------------------
String.prototype.isEngNum = function() {
  return (/^[0-9a-zA-Z]+$/).test(this.remove(arguments[0])) ? true : false;
}
//-----------------------------------------------------------------------------
// 숫자와 영어 혼용 - arguments[0] : 추가 허용할 문자들
// @Return: boolean
//-----------------------------------------------------------------------------
String.prototype.isEngAndNum = function() {
  //return (/^[a-zA-z0-9]+$/).test(this.remove(arguments[0])) ? true : false;
  
	//return (() && ()) ? true : false;
	var tempStr = false;
	var tempStr2 = false;
	var tempStr3 = true;
	var str = this.trim();
	
	if ( this.trim() == ""){ str="" }
	var strln = str.length;

	for (var i = 0;  i < strln;  i++) {
		var slideStr = str.charCodeAt(i)
		 var ss = str.substring(i,i+1);

		//if ((slideStr >= 48) && (slideStr <= 57) && (tempStr == false)) {     // 숫자
		if (("0123456789".indexOf(ss) >= 0) && (tempStr == false)) {
		//if (str.isNum() && (tempStr == false)) {
			tempStr = true;
		}

		//if ((slideStr >= 97) && (slideStr <= 122) && (tempStr2 == false)) {     // 영문
		if (("abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ".indexOf(ss) >= 0) && (tempStr2 == false)) {
		//if (str.isEng() && (tempStr2 == false)) {
			tempStr2 = true;
		}

		if (("abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789".indexOf(ss) < 0)) {
			tempStr3 = false;
		} 
	}

	if ((tempStr == true) && (tempStr2 == true) && (tempStr3 == true)) {
		return true;
	}
}
//-----------------------------------------------------------------------------
// 숫자와 영어만 허용 - arguments[0] : 추가 허용할 문자들
// @Return: boolean
//-----------------------------------------------------------------------------
String.prototype.isNumEng = function() {
  return this.isEngNum(arguments[0]);
}
//-----------------------------------------------------------------------------
// 아이디 체크 영어와 숫자만 체크 첫글자는 영어로 시작 - arguments[0] : 추가 허용할 문자들
// @Return: boolean
//-----------------------------------------------------------------------------
String.prototype.isUserid = function() {
  return (/^[a-zA-z]{1}[0-9a-zA-Z]+$/).test(this.remove(arguments[0])) ? true : false;
}
//-----------------------------------------------------------------------------
// 한글 체크 - arguments[0] : 추가 허용할 문자들
// @Return: boolean
//-----------------------------------------------------------------------------
String.prototype.isKor = function() {
  return (/^[가-힣]+$/).test(this.remove(arguments[0])) ? true : false;
}
//-----------------------------------------------------------------------------
// 주민번호 체크 - arguments[0] : 주민번호 구분자
// XXXXXX-XXXXXXX
// @Return: boolean
//-----------------------------------------------------------------------------
String.prototype.isJumin = function() {
  var arg = arguments[0] ? arguments[0] : "";
  var jumin = eval("this.match(/[0-9]{2}[01]{1}[0-9]{1}[0123]{1}[0-9]{1}" + arg + "[1234]{1}[0-9]{6}$/)");
  if(jumin == null) {
    return false;
  }
  else {
    jumin = jumin.toString().num().toString();
  }
  // 생년월일 체크
  var birthYY = (parseInt(jumin.charAt(6)) == (1 ||2)) ? "19" : "20";
  birthYY += jumin.substr(0, 2);
  var birthMM = jumin.substr(2, 2) - 1;
  var birthDD = jumin.substr(4, 2);
  var birthDay = new Date(birthYY, birthMM, birthDD);
  if(birthDay.getYear() % 100 != jumin.substr(0,2) || birthDay.getMonth() != birthMM || birthDay.getDate() != birthDD) {
    return false;
  }
  var sum = 0;
  var num = [2, 3, 4, 5, 6, 7, 8, 9, 2, 3, 4, 5]
  var last = parseInt(jumin.charAt(12));
  for(var i = 0; i < 12; i++) {
    sum += parseInt(jumin.charAt(i)) * num[i];
  }
  return ((11 - sum % 11) % 10 == last) ? true : false;
}
//-----------------------------------------------------------------------------
// 외국인 등록번호 체크 - arguments[0] : 등록번호 구분자
// XXXXXX-XXXXXXX
// @Return: boolean
//-----------------------------------------------------------------------------
String.prototype.isForeign = function() {
  var arg = arguments[0] ? arguments[0] : "";
  var jumin = eval("this.match(/[0-9]{2}[01]{1}[0-9]{1}[0123]{1}[0-9]{1}" + arg + "[5678]{1}[0-9]{1}[02468]{1}[0-9]{2}[6789]{1}[0-9]{1}$/)");
  if(jumin == null) {
    return false;
  }
  else {
    jumin = jumin.toString().num().toString();
  }
  // 생년월일 체크
  var birthYY = (parseInt(jumin.charAt(6)) == (5 || 6)) ? "19" : "20";
  birthYY += jumin.substr(0, 2);
  var birthMM = jumin.substr(2, 2) - 1;
  var birthDD = jumin.substr(4, 2);
  var birthDay = new Date(birthYY, birthMM, birthDD);
  if(birthDay.getYear() % 100 != jumin.substr(0,2) || birthDay.getMonth() != birthMM || birthDay.getDate() != birthDD) {
    return false;
  }
  if((parseInt(jumin.charAt(7)) * 10 + parseInt(jumin.charAt(8))) % 2 != 0) {
    return false;
  }
  var sum = 0;
  var num = [2, 3, 4, 5, 6, 7, 8, 9, 2, 3, 4, 5]
  var last = parseInt(jumin.charAt(12));
  for(var i = 0; i < 12; i++) {
    sum += parseInt(jumin.charAt(i)) * num[i];
  }
  return (((11 - sum % 11) % 10) + 2 == last) ? true : false;
}
//-----------------------------------------------------------------------------
// 사업자번호 체크 - arguments[0] : 등록번호 구분자
// XX-XXX-XXXXX
// @Return: boolean
//-----------------------------------------------------------------------------
String.prototype.isBiznum = function() {
  var arg = arguments[0] ? arguments[0] : "";
  var biznum = eval("this.match(/[0-9]{3}" + arg + "[0-9]{2}" + arg + "[0-9]{5}$/)");
  if(biznum == null) {
    return false;
  }
  else {
    biznum = biznum.toString().num().toString();
  }
  var sum = parseInt(biznum.charAt(0));
  var num = [0, 3, 7, 1, 3, 7, 1, 3];
  for(var i = 1; i < 8; i++) sum += (parseInt(biznum.charAt(i)) * num[i]) % 10;
  sum += Math.floor(parseInt(parseInt(biznum.charAt(8))) * 5 / 10);
  sum += (parseInt(biznum.charAt(8)) * 5) % 10 + parseInt(biznum.charAt(9));
  return (sum % 10 == 0) ? true : false;
}
//-----------------------------------------------------------------------------
// 법인 등록번호 체크 - arguments[0] : 등록번호 구분자
// XXXXXX-XXXXXXX
// @Return: boolean
//-----------------------------------------------------------------------------
String.prototype.isCorpnum = function() {
  var arg = arguments[0] ? arguments[0] : "";
  var corpnum = eval("this.match(/[0-9]{6}" + arg + "[0-9]{7}$/)");
  if(corpnum == null) {
    return false;
  }
  else {
    corpnum = corpnum.toString().num().toString();
  }
  var sum = 0;
  var num = [1, 2, 1, 2, 1, 2, 1, 2, 1, 2, 1, 2]
  var last = parseInt(corpnum.charAt(12));
  for(var i = 0; i < 12; i++) {
    sum += parseInt(corpnum.charAt(i)) * num[i];
  }
  return ((10 - sum % 10) % 10 == last) ? true : false;
}
//-----------------------------------------------------------------------------
// 이메일의 유효성을 체크
// @Return: boolean
//-----------------------------------------------------------------------------
String.prototype.isEmail = function() {
  return (/\w+([-+.]\w+)*@\w+([-.]\w+)*\.[a-zA-Z]{2,4}$/).test(this.trim());
}
//-----------------------------------------------------------------------------
// 전화번호 체크 - arguments[0] : 전화번호 구분자
// @Return: boolean
//-----------------------------------------------------------------------------
String.prototype.isPhone = function() {
  var arg = arguments[0] ? arguments[0] : "";
  return eval("(/(02|0[3-9]{1}[0-9]{1})" + arg + "[1-9]{1}[0-9]{2,3}" + arg + "[0-9]{4}$/).test(this)");
}
//-----------------------------------------------------------------------------
// 핸드폰번호 체크 - arguments[0] : 핸드폰 구분자
// @Return: boolean
//-----------------------------------------------------------------------------
String.prototype.isMobile = function() {
  var arg = arguments[0] ? arguments[0] : "";
  return eval("(/01[016789]" + arg + "[1-9]{1}[0-9]{2,3}" + arg + "[0-9]{4}$/).test(this)");
}
//-----------------------------------------------------------------------------
// 날짜 체크 - arguments[0] : 날짜 구분자
// @Return: boolean
//-----------------------------------------------------------------------------
String.prototype.isDate = function() {
  var arg = arguments[0] ? arguments[0] : "";
  return eval("(/20[0-9][0-9]" + arg + "[0-1]{1}[0-9]{1}" + arg + "[0-3]{1}[0-9]{1}$/).test(this)");
}
//-----------------------------------------------------------------------------
// 유효한 페이지 구성요소 체크 - arguments[0] : 구성요소명
// @Return: boolean
//-----------------------------------------------------------------------------
String.prototype.isObject = function() {
  var arg = arguments[0] ? arguments[0] : "";
  var elm = eval("document.getElementById('" + arg + "')");
  return (elm) ? true : false;
}


/*
 * http://www.quirksmode.org/js/detect.html
 *
 */

var BrowserDetect = {
  init: function () {
    this.browser = this.searchString(this.dataBrowser) || "An unknown browser";
    this.version = this.searchVersion(navigator.userAgent)
      || this.searchVersion(navigator.appVersion)
      || "an unknown version";
    this.OS = this.searchString(this.dataOS) || "an unknown OS";
  },
  searchString: function (data) {
    for (var i=0;i<data.length;i++) {
      var dataString = data[i].string;
      var dataProp = data[i].prop;
      this.versionSearchString = data[i].versionSearch || data[i].identity;
      if (dataString) {
        if (dataString.indexOf(data[i].subString) != -1)
          return data[i].identity;
      }
      else if (dataProp)
        return data[i].identity;
    }
  },
  searchVersion: function (dataString) {
    var index = dataString.indexOf(this.versionSearchString);
    if (index == -1) return;
    return parseFloat(dataString.substring(index+this.versionSearchString.length+1));
  },
  dataBrowser: [
    {
      string: navigator.userAgent,
      subString: "Chrome",
      identity: "Chrome"
    },
    {
      string: navigator.userAgent,
      subString: "OmniWeb",
      versionSearch: "OmniWeb/",
      identity: "OmniWeb"
    },
    {
      string: navigator.vendor,
      subString: "Apple",
      identity: "Safari"
    },
    {
      prop: window.opera,
      identity: "Opera"
    },
    {
      string: navigator.vendor,
      subString: "iCab",
      identity: "iCab"
    },
    {
      string: navigator.vendor,
      subString: "KDE",
      identity: "Konqueror"
    },
    {
      string: navigator.userAgent,
      subString: "Firefox",
      identity: "Firefox"
    },
    {
      string: navigator.vendor,
      subString: "Camino",
      identity: "Camino"
    },
    {   // for newer Netscapes (6+)
      string: navigator.userAgent,
      subString: "Netscape",
      identity: "Netscape"
    },
    {
      string: navigator.userAgent,
      subString: "MSIE",
      identity: "Explorer",
      versionSearch: "MSIE"
    },
    {
      string: navigator.userAgent,
      subString: "Gecko",
      identity: "Mozilla",
      versionSearch: "rv"
    },
    {     // for older Netscapes (4-)
      string: navigator.userAgent,
      subString: "Mozilla",
      identity: "Netscape",
      versionSearch: "Mozilla"
    }
  ],
  dataOS : [
    {
      string: navigator.platform,
      subString: "Win",
      identity: "Windows"
    },
    {
      string: navigator.platform,
      subString: "Mac",
      identity: "Mac"
    },
    {
      string: navigator.platform,
      subString: "Linux",
      identity: "Linux"
    }
  ]
};
BrowserDetect.init();

/*
document.write(BrowserDetect.browser + "<br>");
document.write(BrowserDetect.version + "<br>");
document.write(BrowserDetect.OS + "<br>");
*/
