﻿var ToStringBuilder = Class.create();
ToStringBuilder.prototype = {
	initialize: function() {
		// do nothing
	},
	reflectionToString: function(obj) {
		var result = "";
		if (obj.propertyIsEnumerable) {
			for (var prop in obj) {
				if (obj[prop] && typeof(obj[prop]) != 'function') {
					result += (result ? ", " : "") + prop + "=" + obj[prop];
				}
			}
		}
		return obj.toString() + "[" + result + "]";
	}
}

var $n = function(arg , container){					
	if (container)
		return $(eval(container+'.'+arg));
	else{
		try{
			return $(eval('clientIds.'+arg));
		}catch(e){			
			return $(arg);
		}		
	}
}

//트림공백제거
String.prototype.trim = function() {
    return this.replace(/(^[ \f\n\r\t]*)|([ \f\n\r\t]*$)/g, "");
}

String.prototype.getBytes = function() {
    var s = (this != null) ? this : "";
	
    var bytes = 0;
    var c = "";
    var u = "";
    for (var i = 0; i < s.length; i++) {
        c = s.charAt(i);
        u = escape(c);
        if (u.length < 4) { // 반각문자 : 기본적인 영문, 숫자, 특수기호
            bytes++; // + 1byte
        } else {
            var b = parseInt(c.charCodeAt(0));
            if (((b >= 65377) && (b <= 65500)) || ((b >= 65512) && (b <= 65518))) // 반각문자 유니코드 10진수 범위 : 한국어, 일본어, 특수문자
                bytes++; // + 1byte
            else // 전각문자 : 위 조건을 제외한 모든 문자
                bytes += 2; // + 2byte
        }
    }
    return bytes;
};



$Utils = {
    replace: function(targetStr, searchStr, replaceStr) {
        var len, i, tmpstr;
        len = targetStr.length;
        tmpstr = "";
        for (i = 0; i < len; i++) {
            if (targetStr.charAt(i) != searchStr) {
                tmpstr = tmpstr + targetStr.charAt(i);
            }
            else {
                tmpstr = tmpstr + replaceStr;
            }
        }
        return tmpstr;
    } ,
	isAlphaNumber : function(sValue) { 
		if(sValue.length == 0)
			return false;

		sValue = sValue.toUpperCase();
		for(var i=0; i < sValue.length; i++) {
			if(!(('A' <= sValue.charAt(i) && sValue.charAt(i) <= 'Z') || ('0' <= sValue.charAt(i) && sValue.charAt(i) <= '9')))
				return false;
		}
		return true;
	}  ,   
	isAlphaAndNumber : function(val){
		var isAlpha = false;
		var isNumber = false;
		var arr = val.split("");
		val = val.toLowerCase();
		
		for(var i=0; i < val.length; i++) 
		{	
			if ('a' <= val.charAt(i) &&val.charAt(i) <= 'z' ){
				isAlpha = true;
			}
			
			if ('0' <= val.charAt(i) && val.charAt(i) <= '9' ){
				isNumber = true;
			}
		}
		
		if (isAlpha && isNumber){
			return true;
		}else{
			return false;
		}
	}	, 
    /**
    * 입력값에 숫자만 있는지 체크
    */
    isNumber: function(input) {
        for (var idx = 0; idx < input.length; idx++) {
            if (input.charAt(idx) < '0' || input.charAt(idx) > '9') {
                return false;
            }
        }

        return true;
    }
,
    /**
    * 유효한(존재하는) 월(月)인지 체크
    */
    isValidMonth: function(mm) {
        var m = parseInt(mm, 10);
        return (m >= 1 && m <= 12);
    }

,
    /**
    * 유효한(존재하는) 일(日)인지 체크
    */
    isValidDay: function(yyyy, mm, dd) {
        var m = parseInt(mm, 10) - 1;
        var d = parseInt(dd, 10);

        var end = new Array(31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31);
        if ((yyyy % 4 == 0 && yyyy % 100 != 0) || yyyy % 400 == 0) {
            end[1] = 29;
        }
        return (d >= 1 && d <= end[m]);
    }
,
    isValidDate: function(obj, format) {
        var date = obj.value;

        if (date.length != 0) {

            if ((date.length == 10) && (date.indexOf('.') == 4) && (date.lastIndexOf('.') == 7)) {
                date = $Utils.replace(date, ".", "");
            }

            if (date.length != 8) {
                alert("8자리를 입력하셔야합니다.");
                obj.focus();
                return;
            }

            if (!$Utils.isNumber(date)) {
                alert("숫자만 입력하세요.");
                obj.focus();
                return;
            }

            var year = date.substring(0, 4);
            var month = date.substring(4, 6);
            var day = date.substring(6, 8);

            if (parseInt(year, 10) >= 1900 && $Utils.isValidMonth(month) && $Utils.isValidDay(year, month, day)) {

                return;
            }
            alert("잘못된 날짜입니다.");
            obj.focus();
            return;
        }
    }

}

var BrowserLayout = {
	
	scroll : function() {
		var scrOfX = 0, scrOfY = 0;
		if( typeof( window.pageYOffset ) == 'number' ) {
			//Netscape compliant
			scrOfY = window.pageYOffset;
			scrOfX = window.pageXOffset;
		} else if( document.body && ( document.body.scrollLeft || document.body.scrollTop ) ) {
			//DOM compliant
			scrOfY = document.body.scrollTop;
			scrOfX = document.body.scrollLeft;
		} else if( document.documentElement && ( document.documentElement.scrollLeft || document.documentElement.scrollTop ) ) {		
			//IE6 standards compliant mode
			scrOfY = document.documentElement.scrollTop;
			scrOfX = document.documentElement.scrollLeft;
		}
		
		return {top:scrOfY,left:scrOfX};
	} , 	
	
	size : function() {
		var myWidth = 0, myHeight = 0;
		if( typeof( window.innerWidth ) == 'number' ) {
			//Non-IE
			myWidth = window.innerWidth;
			myHeight = window.innerHeight;
		} else if( document.documentElement && ( document.documentElement.clientWidth || document.documentElement.clientHeight ) ) {
			//IE 6+ in 'standards compliant mode'
			myWidth = document.documentElement.clientWidth;
			myHeight = document.documentElement.clientHeight;
		} else if( document.body && ( document.body.clientWidth || document.body.clientHeight ) ) {
			//IE 4 compatible
			myWidth = document.body.clientWidth;
			myHeight = document.body.clientHeight;
		}
		return {width:myWidth,height:myHeight};		
	}	
	
}
