var NptWindow = new function __NpfWindow()
{
	/* ÇØ»óµµ¿¡ °ü°è¾øÀÌ È­¸é °¡¿îµ¥¿¡ ÆË¾÷À» ¶ç¿ì°Å³ª ÆË¾÷ÀÇ À§Ä¡¸¦ Á¶Á¤ */
	this.OpenWindow = function( url, winname, features) 
	{ 
		if ( features != '' )
		{
			features = NgbString.TrimAll( features.toLowerCase() );
			var arrFeatures = features.split( ',', 10 );
			var width, height, left, top;
			
			width = this.GetValueInFeatures( features, 'width' );
			height = this.GetValueInFeatures( features, 'height' );
			left = this.GetValueInFeatures( features, 'left' );
			top = this.GetValueInFeatures( features, 'top' );
			
			if( width != null && height != null )
			{
				if( left == null )
					left = (screen.width - width) / 2; 
				if( top == null )
					top = (screen.height - height) / 2; 
			}
			else
			{
				if( left == null )
					left = 30;
				if( height == null )
					top = 30;
			}
			
			features = this.SetValueInFeatures( features, 'left', left );
			features = this.SetValueInFeatures( features, 'top', top );
		}
		
		var popwin = window.open( url, winname, features ); 
		
		if( popwin == null ) 
		{
			alert( 'ÆË¾÷Ã¢ ¼³Á¤À» ÇØÁ¦ÇØ ÁÖ¼¼¿ä.' );
			location.href = 'http://help.nexon.com/help/page/nx.aspx?url=etc/popupguide';
			return false;
		}
		popwin.focus();
		return popwin;
	}
	
	
	this.GetValueInFeatures = function( strBase, strName )
	{
		if( strBase.indexOf( strName + '=' ) != -1 )
		{
			var strTail = strBase.substr( strBase.indexOf( strName + '=' ) );
			if( strTail.indexOf( ',' ) != -1 )
				strTail = strTail.substr( 0, strTail.indexOf( ',' ) );
				
			return Number( strTail.substr( strTail.indexOf( '=' ) + 1 ) );
		}
		else 
			return null;
	} 
	
	this.SetValueInFeatures = function( strBase, strName, strValue )
	{
		if( strBase.indexOf( strName + '=' ) != -1 )
		{
			return strBase;
		}
		else 
			return strBase + ',' + strName + '=' + strValue;
	}
}

var NptCheckValidation = new function __NptCheckValidation()
{
	this.CheckSpecialCharacter = function ( strValue ) 
	{ 
		var bReturn = true;
		
		for ( var nLoop = 0; nLoop < strValue.length; nLoop ++ )
		{
			var charValue = strValue.charAt( nLoop );
			
			if (( charValue >= 'A' && charValue <= 'Z') || ( charValue >= 'a' && charValue <='z'))
			{
				continue;//'¿µ¾î';
			}
			else if ( charValue >= '0' && charValue <= '9')
			{
				continue;//'¼ýÀÚ';
			}
			else if ( charValue >= '\uAC00' && charValue <= '\uD7A3')
			{
				continue;//'ÇÑ±Û';
			}
			else if ( charValue == ' ')
			{
				continue; // ' ' (space)
			}
			else
			{
				bReturn = false;//'Áñ
				break;				
			}
		}
		
		return bReturn;
	}
	
	this.CheckNumberOnly = function ( strValue ) 
	{ 
		var bReturn = true;

		for ( var nLoop = 0; nLoop < strValue.length; nLoop ++ )
		{
			var charValue = strValue.charAt( nLoop );
			
			if ( charValue < '0' || charValue > '9' )
			{
				bReturn = false;// Áñ
				break;	
			}
		}

		return bReturn;
	}
	
	this.CheckNumberNAlphabetOnly = function ( strValue ) 
	{ 
		var bReturn = true;

		for ( var nLoop = 0; nLoop < strValue.length; nLoop ++ )
		{
			var charValue = strValue.charAt( nLoop );
			
			if (( charValue >= 'A' && charValue <= 'Z') || ( charValue >= 'a' && charValue <='z'))
			{
				continue;//'¿µ¾î';
			}
			else if ( charValue >= '0' && charValue <= '9')
			{
				continue;//'¼ýÀÚ';
			}
			else
			{
				bReturn = false;//'Áñ
				break;				
			}
		}
		return bReturn;
	}
	
}

var NptCheckValidation_Password = new function __NptCheckValidation_Password()
{
	this.CheckPasswordValidation = function ( strPassword , strNexonID )
	{
		var n4ReturnValue = 0;
		
		var	bHasNumber	= false;
		var	bHasWord	= false;
		var	bHasSpecial	= false;
		var n4CharCount	= 0;
		var cBeforeChar = '\0';
		var	strAllowChars = "1234567890abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ~!@#$%^&*()_+|`-=\\[];',./?><{:}\"";
		var	strSpecialChars ="~!@#$%^&*()_+|`-=\\[];',./?><{:}\"";
		
		if ( strPassword == '' )
		{
			n4ReturnValue = -1;	// ºñ¹Ð¹øÈ£¸¦ ÀÔ·ÂÇØ ÁÖ¼¼¿ä.
		}
		else if ( strPassword.length < 6 || strPassword.length > 16 )
		{
			n4ReturnValue = -2;	// ºñ¹Ð¹øÈ£´Â 6~16ÀÚ±îÁö »ç¿ë °¡´ÉÇÕ´Ï´Ù.
		}
		else
		{
			for ( var nLoop = 0; nLoop < strPassword.length; nLoop ++ )
			{
				var charValue = strPassword.charAt( nLoop );
				
				if (( charValue >= 'A' && charValue <= 'Z') || ( charValue >= 'a' && charValue <='z'))
					bHasWord = true;	//'¿µ¾î';
				else if ( charValue >= '0' && charValue <= '9')
					bHasNumber	= true;	//'¼ýÀÚ';
				else if ( strSpecialChars.indexOf( charValue ) >= 0 )
					bHasSpecial = true;	//'Æ¯¼ö¹®ÀÚ'
					
				if ( strAllowChars.indexOf( charValue ) == -1 )
				{
					n4ReturnValue = 2;	// "Å°º¸µå»ó¿¡ ÀÔ·ÂµÈ ¿µ¹®/¼ýÀÚ/Æ¯¼ö¹®ÀÚ¸¸ ¼³Á¤ÇÏ½Ç ¼ö ÀÖ½À´Ï´Ù."
					break; // Çã¿ëµÇÁö ¾ÊÀº ¹®ÀÚ
				}
				
				if ( cBeforeChar != charValue )
					n4CharCount = 0;
				else if ( ++n4CharCount >= 2 )
				{
					n4ReturnValue = 3;	// "3È¸ ÀÌ»ó ¹Ýº¹µÇ´Â ¹®ÀÚ´Â ¼³Á¤ÇÏ½Ç ¼ö ¾ø½À´Ï´Ù. \\n¿¹) aaa, 111"
					break; // 3¿¬¼Ó µ¿ÀÏ ¹®ÀÚ
				}
	
				cBeforeChar	= charValue;
			}
			
			if ( strPassword == strNexonID )
			{
				n4ReturnValue = 1;	// "³Ø½¼¾ÆÀÌµð¿Í °°Àº ºñ¹Ð¹øÈ£´Â ¼³Á¤ÇÏ½Ç ¼ö ¾ø½À´Ï´Ù."
			}
			
			if ( n4ReturnValue == 0 )
			{
				if ( bHasWord && bHasSpecial )	// ¿µ¹® + Æ¯¼ö¹®ÀÚ
					n4ReturnValue = 0;	// Á¤»ó
				else if ( bHasNumber && bHasSpecial )	// ¼ýÀÚ + Æ¯¼ö¹®ÀÚ
					n4ReturnValue = 0;	// Á¤»ó
				else if ( bHasNumber && bHasWord )	// ¼ýÀÚ + ¿µ¹®
					n4ReturnValue = 0;	// Á¤»ó
				else	// ¼ýÀÚ³ª ¹®ÀÚ, Æ¯¼ö¹®ÀÚ¸¦ Æ÷ÇÔÇÏÁö ¾ÊÀ½
					n4ReturnValue = 4;	// "¿µ¹®/¼ýÀÚ/Æ¯¼ö ¹®ÀÚ Áß 2°¡Áö ÀÌ»ó Á¶ÇÕÇÏ¼Å¾ß ÇÕ´Ï´Ù. \\n¿¹) nx721, 78*nx"
			}
			
		}
		
		return n4ReturnValue;
	}
	
	this.CheckPasswordCfm = function ( strPassword, strPassword_cfm )
	{
		var n4ReturnValue = 0;
		
		if ( strPassword == '' )
		{
			n4ReturnValue = 1 ;// ºñ¹Ð¹øÈ£¸¦ ¸ÕÀú ÀÔ·ÂÇØ ÁÖ½Ã±â ¹Ù¶ø´Ï´Ù.
		}
		else if ( strPassword_cfm == '' )
		{
			n4ReturnValue = 2 ;// ºñ¹Ð¹øÈ£¸¦ È®ÀÎÇØ ÁÖ¼¼¿ä.
		}
		else if ( strPassword != strPassword_cfm )
		{
			n4ReturnValue = 3 ;// ÀÔ·ÂÇÑ ºñ¹Ð¹øÈ£°¡ ÀÏÄ¡ÇÏÁö ¾Ê½À´Ï´Ù.
		}
		
		return n4ReturnValue;
		
	}
	
	this.GetErrorMessage_CheckPassword = function ( n4ErrorCode )
	{
		var strErrorMessage = '';

		switch( n4ErrorCode )
		{
			case -1 : strErrorMessage = 'ºñ¹Ð¹øÈ£¸¦ ÀÔ·ÂÇØ ÁÖ¼¼¿ä.'; break;
			case -2 : strErrorMessage = 'ºñ¹Ð¹øÈ£´Â 6~16ÀÚ±îÁö »ç¿ë °¡´ÉÇÕ´Ï´Ù.'; break;
			
			case -3 : strErrorMessage = '±âÁ¸ ºñ¹Ð¹øÈ£¸¦ ÀÔ·ÂÇØ ÁÖ¼¼¿ä.'; break;
			case -4 : strErrorMessage = '±âÁ¸ ºñ¹Ð¹øÈ£¿Í µ¿ÀÏÇÑ ºñ¹Ð¹øÈ£¸¦ ÀÔ·ÂÇÏ¼Ì½À´Ï´Ù. ´Ù½Ã ÀÔ·ÂÇØÁÖ¼¼¿ä.'; break;
			
			case 1 : strErrorMessage = '³Ø½¼ID¿Í µ¿ÀÏÇÑ ºñ¹Ð¹øÈ£´Â »ç¿ëÇÏ½Ç ¼ö ¾ø½À´Ï´Ù.'; break;
			case 2 : strErrorMessage = 'Å°º¸µå¿¡ ÀÔ·ÂµÈ Æ¯¼ö¹®ÀÚ¸¸ »ç¿ë °¡´ÉÇÕ´Ï´Ù.'; break;
			case 3 : strErrorMessage = '°°Àº ¹®ÀÚ´Â 3È¸ ÀÌ»ó ¿¬°áÇØ¼­ »ç¿ëÇÏ½Ç ¼ö ¾ø½À´Ï´Ù.'; break;
			case 4 : strErrorMessage = '¿µ¹®/¼ýÀÚ/Æ¯¼ö¹®ÀÚ Áß 2°¡Áö ÀÌ»ó Æ÷ÇÔµÇ¾î ÀÖ¾î¾ß ÇÕ´Ï´Ù.'; break;
		}

		return strErrorMessage;
	}
	
	this.GetErrorMessage_ConfirmPassword = function ( n4ErrorCode )
	{
		var strErrorMessage = '';

		switch( n4ErrorCode )
		{
			case 1 : strErrorMessage = 'ºñ¹Ð¹øÈ£¸¦ ¸ÕÀú ÀÔ·ÂÇØ ÁÖ½Ã±â ¹Ù¶ø´Ï´Ù.'; break;
			case 2 : strErrorMessage = 'ºñ¹Ð¹øÈ£¸¦ È®ÀÎÇØ ÁÖ¼¼¿ä.'; break;
			case 3 : strErrorMessage = 'ÀÔ·ÂÇÑ ºñ¹Ð¹øÈ£°¡ ÀÏÄ¡ÇÏÁö ¾Ê½À´Ï´Ù.'; break;
		}

		return strErrorMessage;
	}
} 

var NptPlug = new function __NptPlug()
{
	this.StartPlug = function () 
	{
		var strMatch = "";
		if (window.navigator.appName == "Microsoft Internet Explorer")
		{
			strMatch = window.navigator.appVersion;
		}
		else if (window.navigator.userAgent.indexOf("Firefox") != -1)
		{
			strMatch = window.navigator.userAgent;
		} 
		
		if( ( strMatch.match("Windows NT 5.0") == "Windows NT 5.0" ) || 
				( strMatch.match("Windows NT 5.1") == "Windows NT 5.1" ) || 
				( strMatch.match("Windows NT 5.2") == "Windows NT 5.2" ) ||
				( strMatch.match("Windows NT 6.0") == "Windows NT 6.0" ) 
		)
			NGM.LaunchGame( "65538", "" );
		else	
			alert( "³Ø½¼ÇÃ·¯±×´Â Windows 2000 ÀÌ»ó¿¡¼­¸¸ ±¸µ¿µË´Ï´Ù." );
	}
}

var NgbLogin_Test = new function __NgbLogin()
{
	this.isLoginProcessing = false;
	
	this.SubmitLogin = function()
	{
		var strNexonID = arguments [ 1 ][ 0 ];
		var strPassword = arguments [ 1 ][ 1 ];

		strNexonID = NgbString.Trim( strNexonID );
		strPassword = NgbString.Trim( strPassword );
		
		if ( this.isLoginProcessing )
		{
			alert( "·Î±×ÀÎ ÇÏ´Â ÁßÀÔ´Ï´Ù. Àá½Ã¸¸ ±â´Ù·ÁÁÖ¼¼¿ä." );
			return false;
		}
		this.isLoginProcessing = true;
		
		if( strNexonID == '' )
		{
			alert( '¾ÆÀÌµð¸¦ ÀÔ·ÂÇØ ÁÖ¼¼¿ä' );
			this.isLoginProcessing = false;
		}
		else if( strPassword == '' )
		{
			alert( 'ºñ¹Ð¹øÈ£¸¦ ÀÔ·ÂÇØ ÁÖ¼¼¿ä' );
			this.isLoginProcessing = false;
		}
		else
		{
			NgbClinentForm.AddChildForSubform( 'strNexonID',strNexonID );
			NgbClinentForm.AddChildForSubform( 'strPassword', strPassword );
			NgbClinentForm.SubmitForm( '../../login/page/loginproc.aspx');
		}
	}

	this.Login = function( strNexonID, strPassword )
	{
		NgbEVM.AddCommand( NgbEVM.k_nEventType_onPageEnd, new NgbEVMDelegator( NgbLogin_Test.SubmitLogin ), strNexonID, strPassword );
	}

	this.Logout = function()
	{
		document.location.href = '../../login/page/logout.aspx?redirect=' + escape( document.location.href );
	}
}

var NptBrowser = {
	agt : navigator.userAgent.toLowerCase(),
	check : function(browserName) { return NptBrowser.agt.indexOf(browserName) != -1 },

	//Browser Name
	msie : function() { return NptBrowser.check("msie") },
	msie5 : function() { return NptBrowser.check("msie 5") },
	msie55 : function() { return NptBrowser.check("msie 5.5") },
	msie6 : function() { return NptBrowser.check("msie 6") },
	msie7 : function() { return NptBrowser.check("msie 7") },

	firefox : function() { return NptBrowser.check("firefox") },
	netscape : function() { return NptBrowser.check("netscape") },

	safari : function() { return NptBrowser.check("safari") },
	opera : function() { return NptBrowser.check("opera") },

	//Browser Engine
	gecko : function() { return NptBrowser.check("gecko") },
	khtml : function() { return NptBrowser.check("khtml") },
	
	//OS
	windows : function() { return NptBrowser.check("windows") },
	windows2000 : function() { return NptBrowser.check("windows nt 5.0") },
	windowsXP : function() { return NptBrowser.check("windows nt 5.1") },
	windows98 : function() { return NptBrowser.check("windows 98") },
	mac : function() { return NptBrowser.check("mac") },
	linux : function() { return NptBrowser.check("linux") }
}

var NptMouseEvent  = {
	positionX : function(evnt)
	{
		if ( window.pageYOffset ) { LeftValue = window.pageXOffset; }
		else if ( document.documentElement && document.documentElement.scrollTop ) { LeftValue = document.documentElement.scrollLeft; }
		else if ( document.body ) { LeftValue = document.body.scrollLeft; }

		if(NptBrowser.msie()) { return LeftValue + event.clientX; }
		else { return evnt.pageX; }
	},
	positionY : function(evnt)
	{
		if ( window.pageYOffset ) { TopValue = window.pageYOffset;	}
		else if ( document.documentElement && document.documentElement.scrollTop ) { TopValue = document.documentElement.scrollTop; }
		else if ( document.body ) { TopValue = document.body.scrollTop; }

		if(NptBrowser.msie()) { return TopValue + event.clientY; }
		else { return evnt.pageY;}
	}
}

var NgbSecure = new function __NgbSecure()
{
	this.DetectKey = function( evt )
	{
		if( NptBrowser.msie() )
		{
			if( event.ctrlKey == true )
				return false;
			
			if ( event.keyCode == 27 )
				return false;
			
			if ( event.keyCode == 116 || ( event.ctrlKey && (event.keyCode == 78 || event.keyCode == 82) ) )
			{
        		event.keyCode= 1;
				return false;
			}
		}
		else
		{
			if( evt.keyCode == 17 )	// ctrl key
				return false;
			
			if ( evt.keyCode == 27 )
				return false;
			
			if ( evt.keyCode == 116 || ( evt.keyCode == 17 && ( evt.keyCode == 78 || evt.keyCode == 82 ) ) )
			{
        		evt.keyCode = 1;
				return false;
			}
		}
	}
	
}
