String.byteLength = String_byteLength;
function String_byteLength(str)
{
	var nLength = 0;
		
	for(var i = 0; i < str.length; i++	)
	{	
		if( str.charCodeAt(i) <= 255)
			nLength += 1;
		else
			nLength += 2;
	}
	
	return nLength;
}

String.strncmp = String_strncmp;
function String_strncmp(str1, str2)
{
	if( str1.length < str2.length)
		return false;

	for(var i=0; i<str2.length; ++i)
		if( str1.charAt(i) != str2.charAt(i))
			return false;

	return true;
}

String.strncmp2 = String_strncmp2;
function String_strncmp2(str1, nStartIdx, str2, nSize)
{

	// ½ÃÀÛÁöÁ¡ÀÌ str1ÀÇ ±æÀÌ¸¦ ³Ñ¾î¼¹´ÂÁö?
	if(nStartIdx>str1.length)
		return -1;
	// str1ÀÇ ³²Àº ±æÀÌ°¡ ºñ±³ÇØ¾ß ÇÒ str2ÀÇ ±æÀÌº¸´Ù ÀÛÀº °æ¿ìÀÎ°¡?
	if(str1.length-nStartIdx<nSize)
		return -1;
	// ºñ±³ÇØ¾ß ÇÒ ±æÀÌ°¡ str2ÀÇ ±æÀÌº¸´Ù Å« °¡?
	if(nSize>str2.length)
		return -1;
	
	for(var i=0; (i<nSize) && (str1.charAt(nStartIdx+i)==str2.charAt(i)); ++i)
		;
	if(i==nSize)
		return 1;
	else
		return 0;
}

String.midif = String_midif;
function String_midif(str1, nStartIdx, fnCmp)
{
	// ½ÃÀÛÁöÁ¡ÀÌ str1ÀÇ ±æÀÌ¸¦ ³Ñ¾î¼¹´ÂÁö..
	if(nStartIdx>str1.length)
		return -1;
		
	var i;
	for(i=0; (i<str1.length) && (fnCmp(str1.charAt(nStartIdx+i))); ++i)
		;
		
	if(i==0)
		return "";
	else
		return str1.substring(nStartIdx, nStartIdx+i);
}

function clsURL(strURL)
{
	this.m_strProtocol = "";
	this.m_strHost = "";
	this.m_nPort = -1;
	this.m_strPathname = "";
	this.m_strParameter = "";
	
	this.href = clsURL_href;
	this.hostname = clsURL_hostname;
	
	if( strURL != null)
	{
		var tmp = clsURL.analyzeURL(strURL);
		if( tmp != null)
			for(prop in tmp)
				this[prop] = tmp[prop];
	}
	
	
}
clsURL.analyzeURL = clsURL_analyzeURL;
function clsURL_analyzeURL(strURL)
{
	var ANALYZED_PROTOCOL = 1;
	var ANALYZED_HOST = 2;
	var ANALYZED_PORT = 3;
	var ANALYZED_PATHNAME = 5;
	var ANALYZED_FILENAME = 6;
	var ANALYZED_PARAMETER = 8;

	var regExp = /(\w+):\/\/([\._a-z\d-]+)(:(\d+))?((\/[ _a-z\d-\\\.]*)*)(\?(\S+))?/i
	var rstr = regExp.exec(strURL);
	if( rstr == null)
		return null;

	var url = new clsURL();
	url.m_strProtocol = rstr[ANALYZED_PROTOCOL];
	url.m_strHost = rstr[ANALYZED_HOST];
	if( url.m_strHost.charAt(url.m_strHost.length-1) == ".")
		url.m_strHost = url.m_strHost.substring(0, url.m_strHost.length-1);
	
	if(rstr[ANALYZED_PORT] != "")
		url.m_nPort = parseInt(rstr[ANALYZED_PORT].substring(1, rstr[ANALYZED_PORT].length));
	
	rstr[ANALYZED_PATHNAME] = rstr[ANALYZED_PATHNAME].replace(/\/+/g, "/");
	if( rstr[ANALYZED_PATHNAME] == "")
		url.m_strPathname = "/";
	else
	{
		if((rstr[ANALYZED_PATHNAME].length>1) && (rstr[ANALYZED_PATHNAME].charAt(rstr[ANALYZED_PATHNAME].length-1)=="/"))
			url.m_strPathname = rstr[ANALYZED_PATHNAME].substring(0, rstr[ANALYZED_PATHNAME].length-1);
		else
			url.m_strPathname = rstr[ANALYZED_PATHNAME];
	}

	url.m_strParameter = rstr[ANALYZED_PARAMETER];

	return url;
}
function clsURL_href()
{
	var strHref = "";
	
	strHref = this.m_strProtocol+"://"+this.hostname();
		
	strHref += this.m_strPathname;
	if( this.m_strParameter != "")
		strHref += "?"+this.m_strParameter;
		
	if(strHref.charAt(strHref.length-1) == "/")
		strHref = strHref.substring(0, strHref.length-1);
		
	return strHref;
}
function clsURL_hostname()
{
	var strHostname = this.m_strHost;
	if( this.m_nPort >=0)
		strHostname += ":"+this.m_nPort;

	return strHostname;
}


function clsDatathinkTag(strGSURL, bCaseSensitive, rstrHost, rstrPURL, nSiteID, nPageType, nErrorNum)
{
	this.m_strGSURL = strGSURL;
	this.m_nSiteID = nSiteID;
	this.m_nPageType = null;
	this.m_bCaseSensitive = null;
	this.m_rstrPURL = null;
	this.m_rstrHost = null;
	this.m_nPageType = null;
	this.m_nErrorNum = null;
	this.m_strTitle = null;
	this.m_strURL = null;
	this.m_strURLLeft = null;
	this.m_strData = null;
	this.m_rstrParameter = null;
		
	switch(nPageType)
	{
	case PAGETYPE_NORMAL:
	case PAGETYPE_ERROR:
		this.m_nPageType = nPageType;
		break;
	default:
		return;
	}
	
	this.m_bCaseSensitive = bCaseSensitive;
	
	if( (nErrorNum<100) || (nErrorNum>=500))
		return;
	
	this.m_rstrPURL = rstrPURL;
	this.m_rstrHost = rstrHost;
	this.m_nPageType = nPageType;
	this.m_nErrorNum = nErrorNum;
	
	this.m_oImg;
	
	this.isServiceHost = clsDatathinkTag_isServiceHost;
	this.doTagging = clsDatathinkTag_doTagging;
	this.refineHost = clsDatathinkTag_refineHost;
	this.refinePathname = clsDatathinkTag_refinePathname;
	this.analyzeURL = clsDatathinkTag_analyzeURL;
	this.analyzeCookie = clsDatathinkTag_analyzeCookie;
	this.findCookieValue = clsDatathinkTag_findCookieValue;
	this.analyzeParameter = clsDatathinkTag_analyzeParameter;
	this.analyzeParameterDynamic = clsDatathinkTag_analyzeParameterDynamic;
	this.isSamePath = clsDatathinkTag_isSamePath;
	this.findParameterValue = clsDatathinkTag_findParameterValue;
	

	if( String.strncmp(document.title, "http://"+document.location.host+document.location.pathname))
		this.m_strTitle = "";
	else
		this.m_strTitle = document.title;

	
	var rstrRet = this.analyzeURL();
	if( rstrRet == null)
		return;
	
	this.m_strURL = rstrRet[0];
	this.m_strURLLeft = rstrRet[1];
	
	
	this.m_strData = this.analyzeCookie();
	if( this.m_strData == null)
		return;
}

function clsDatathinkTag_isServiceHost(strHost)
{
	for(var i=0; i<this.m_rstrHost.length; ++i)
		if( strHost.toLowerCase().indexOf(this.m_rstrHost[i].toLowerCase()) != -1)
			return true;
			
	return false;
}


function clsDatathinkTag_doTagging()
{
	if( (this.m_strURL!=null) && (this.m_strData!=null))
	{
		var strImgURL;
		
		switch(this.m_nPageType)
		{
		case PAGETYPE_NORMAL:
			strImgURL = "http://" + this.m_strGSURL + "/collect.asp?siteid=" + this.m_nSiteID
				+ "&url=" + escape(this.m_strURL).replace("http%3A", "http%3a")
				+ "&data=" + this.m_strData
				+ "&ref=";
				
				for(var i="http://".length; i<document.referrer.length; ++i)
				if( document.referrer.charAt(i) == "/")
					break;
		
				if( this.isServiceHost( document.referrer.substring("http://".length, i)) == false)
					strImgURL += escape(document.referrer.toLowerCase()).replace("http%3A", "http%3a");
				
				strImgURL += "&title=" + escape(this.m_strTitle)
					+ "&left=" + escape(this.m_strURLLeft);
				break;
				
		case PAGETYPE_ERROR:
			strImgURL = "http://" + this.m_strGSURL + "/collect.asp?siteid=" + this.m_nSiteID
				+ "&err=" + this.m_nErrorNum;
				break;
		}
		
		if(DEBUG_FLAG == false)
		{
			this.m_oImg = new Image();
			this.m_oImg.src = strImgURL;
		}
		else
			document.write("<pre>"+strImgURL+"</pre>");
	}
}

function clsDatathinkTag_refineHost(strHost)
{
	var str = "";
	
	if( String.strncmp(strHost, "www.") )
		str = strHost.substring("www.".length, strHost.length);
	else
		str = strHost;

	return str.toLowerCase();
}

function clsDatathinkTag_refinePathname(strPathname)
{
	return strPathname.replace(/\/+/g, "/");
}

function clsDatathinkTag_analyzeURL()
{
	var curl = document.location.href;
	var url = new clsURL(curl);
	
	if( url == null)
		return null;

	// WindowsÀº incase-sensitive, Unix´Â case-sensitive
	url.m_strProtocol = url.m_strProtocol.toLowerCase();
	url.m_strHost = url.m_strHost.toLowerCase();
	if(this.m_bCaseSensitive==false)
	{
		url.m_strPathname = url.m_strPathname.toLowerCase();
		url.m_strParameter = url.m_strParameter.toLowerCase();
	}
	
	var str;

	url.m_strHost = this.refineHost(url.m_strHost);
	

	// »çÀÌÆ® È£½ºÆ® ¸í °Ë»ç	 : Å¸»çÀÌÆ® ÀÏ °æ¿ì Á¦¿ÜÇÑ´Ù. (¹ø¿ª»çÀÌÆ® µîµî)
	if( this.isServiceHost(url.m_strHost) == false)
		return null;
	
	//°íÁ¤URLÃßÃâ
	if (FIXED_URL == true){
		var pstrURL = curl;
		
		var fi;
		for(var fi=0; fi<rstrFURL.length; ++fi){
		
			if( pstrURL.toLowerCase().indexOf(rstrFURL[fi].toLowerCase()) != -1){
				
				if( this.m_bCaseSensitive == false)
					strTemp = rstrFURL[fi].toLowerCase();
				else
					strTemp = rstrFURL[fi];

				var rstrRet = new Array();
				rstrRet[0] = strTemp;
				return rstrRet;
			}
		}
	
	}
	
	// ±×·ìÇÎ ºÐ¼®
	if( url.m_strParameter != "")
	{
		var rstrParam;
		if(this.m_bCaseSensitive == false)
			rstrParam = url.m_strParameter.toLowerCase().split("&");
		else
			rstrParam = url.m_strParameter.split("&");
		var strTmp;	
				
		var strTemp;
		for(i=0; i<this.m_rstrPURL.length; ++i)
		{	
			
			if( this.m_bCaseSensitive == false)
				strTemp = this.m_rstrPURL[i].toLowerCase();
			else
				strTemp = this.m_rstrPURL[i];
				
			var url2 = new  clsURL(strTemp);
			
			if ( this.isSamePath(url.m_strPathname,url2.m_strPathname) )
			{
				
				rstrRet = this.analyzeParameterDynamic(rstrParam, url2.m_strParameter.split("&"));
				
				if(rstrRet!=null)
				{
					rstrRet[0] = url2.m_strProtocol+"://"+url.hostname()+url.m_strPathname+"?"+rstrRet[0];
					
					return rstrRet;
				}
			}
		}
		

	}

	// ±âÅ¸
	rstrRet = new Array();
	
	
	
	if (PARAM_FULL==true){	//ÆÄ¶ó¸ÞÅÍ ´Ù ÀâÀ»¶§
		rstrRet[0] = url.m_strProtocol+"://"+url.hostname()+url.m_strPathname;
		if (url.m_strParameter != "") rstrRet[0] += "?" + url.m_strParameter;
	}else{
		rstrRet[0] = url.m_strProtocol+"://"+url.hostname()+url.m_strPathname;
	}
	rstrRet[1] = "";
	
	return rstrRet;
}

function clsDatathinkTag_analyzeCookie()
{
	var i;
	var strValue;
	var strResult = "";
	var rstrName = new Array();
	rstrName[0] = "DT602G";
	rstrName[1] = "DT602AG";
	rstrName[2] = "DT602R";
	
	
	
	for(i=0; i<rstrName.length; ++i)
	{
		strValue = this.findCookieValue(document.cookie, rstrName[i]);
		if( strValue == null)
			strValue = "99";
		else
		{
			if( (strValue.length==0) || (strValue.length>2) )
				strValue = "99"
				
			if( strValue.length == 1)
				strValue = "0"+strValue;
				
			if( isNaN(strValue))
				strValue = "99";
		}
		
		strResult += strValue;
	}
	
	strValue = this.findCookieValue(document.cookie, "DT602U");
	if( strValue != null)
		strResult += strValue;
		
	return strResult;
}

function clsDatathinkTag_findCookieValue(strCookie, strName)
{
	var strKeyName = strName + "=";
	var i = 0;
	var nTemp;
	while(i<strCookie.length)
	{
		if(String.strncmp2(strCookie, i, strKeyName, strKeyName.length)==1)
		{
			i += strKeyName.length;
			nTemp = i;
			for(; (i<strCookie.length) && (strCookie.charAt(i)!=";"); ++i)
				;
			if(i==nTemp)
				return "";
			else
				return strCookie.substring(nTemp, i);
		}
		else
		{
			for(; (i<strCookie.length); ++i)
				if(strCookie.charAt(i)==";")
				{
					i += 2;
					break;
				}
		}
	}
	
	return null;
}

function clsDatathinkTag_analyzeParameter(rstrParam, rstrKey)
{
	var pi=0, li=0, ki=0;
	var bFound;

	var rnLeft = new Array();
	var rnKey = new Array();
	
	for(keyi=0; keyi<rstrKey.length; ++keyi)
	{
		for(pi=0; pi<rstrParam.length; ++pi)
		{
			if( String.strncmp(rstrParam[pi], rstrKey[keyi]) )
			{
				rnKey[ki++] = pi;
				break;
			}
		}
	}

	
	for(pi=0; pi<rstrParam.length; ++pi)
	{
		bFound = false;
		for(ki=0; ki<rnKey.length; ++ki)
			if( rnKey[ki] == pi)
				bFound = true;
				
		if( bFound == false)
			rnLeft[li++] = pi;
	}
	
	var rstrRet = new Array();
	
	rstrRet[0] = "";
	for(ki=0; ki<rnKey.length; ++ki)
	{
		
		if( ki > 0)
			rstrRet[0] += "&";
		rstrRet[0] += rstrParam[rnKey[ki]];
	}
	
	rstrRet[1] = "";
	for(li=0; li<rnLeft.length; ++li)
	{
		if( li > 0)
			rstrRet[1] += "&";
		rstrRet[1] += rstrParam[rnLeft[li]];
	}

	// ³Ñ¾î¿Â Å°ÀÇ ¼ö¸¸Å­ °ªÀ» Ã£¾Ò´ÂÁö °Ë»ç..
	if(rnKey.length == rstrKey.length)
		return rstrRet;
	else
		return null;
}

function clsDatathinkTag_analyzeParameterDynamic(rstrParam, rstrKey)
{
	var pi=0, keyi=0

	var rstrRet = new Array();
	var strResult = "";
	var strKeyName;
	var strKeyValue;
	var strParamName;
	var strParamValue;
	var tempLenNum;
		
	for(keyi=0; keyi<rstrKey.length; ++keyi)
	{
		tempLenNum = rstrKey[keyi].indexOf("=");
		
		strKeyName = rstrKey[keyi].substring(0,tempLenNum);
		strKeyValue = rstrKey[keyi].substring(tempLenNum+1,rstrKey[keyi].length);
			
		for(pi=0; pi<rstrParam.length; ++pi)
		{
			tempLenNum = rstrParam[pi].indexOf("=");
		
			strParamName = rstrParam[pi].substring(0,tempLenNum);
			strParamValue = rstrParam[pi].substring(tempLenNum+1,rstrParam[pi].length);
				
			if (strKeyName == strParamName){
				
				if (strKeyValue == ""){	//ÆÄ¶ó¸ÞÅÍ ÀÌ¸§¸¸ ÁÖ¾îÁ³À»¶§´Â ¸ðµÎ¹ÝÈ¯
				
					strResult += rstrParam[pi]+"&";
				
				}else{ //ÆÄ¶ó¸ÞÅÍ °ªÀÌ ¸ÅÄªµÇ´Â °Í¸¸
					if (strParamValue.indexOf(strKeyValue) == -1)
						break;
					else
						strResult += rstrParam[pi] + "&";	
				}
				
				break;
			}
	
		}
		
	}

	
	if (strResult != ""){
		rstrRet[0] = strResult.substring(0,strResult.length-1);
		return rstrRet;
	}else{
		return null;
	}
		
	

}

//°°Àº°æ·Î¸¦ °¡Áö´ÂÁö °Ë»ç
function clsDatathinkTag_isSamePath(strPath1,strPath2){
	var wildcard = DTWILDCARD;
	if(this.m_bCaseSensitive==false)
	{
		wildcard = wildcard.toLowerCase();
	}
	 
	var regexp = new RegExp(wildcard);

	if( regexp.test(strPath2) ){	//°¡º¯µð·ºÅä¸®°¡ ÀÖÀ¸¸é
		var temp = strPath2.replace(/[\/]/g,"\\/");
			temp = temp.replace(/\./g,"\\.");
			temp = temp.replace(wildcard,".+");
		
		var regexp2 = new RegExp(temp);
		
		return	regexp2.test(strPath1)
				
	}else{
		return (strPath1 == strPath2)
	}
}

function clsDatathinkTag_findParameterValue(strParamName)
{
	for(var i=0; i<this.m_rstrParameter.length; ++i)
	{
		if( String.strncmp(this.m_rstrParameter[i]+"=", strParamName) )
			return this.m_rstrParameter[i].substring(strParamName.length+1, this.m_rstrParameter[i].length);
	}
	
	return null;
}



var PAGETYPE_NORMAL = 0;
var PAGETYPE_ERROR = 1;
var DTWILDCARD = "DTWILDCARD"
//º¯¼ö¼³¸í
//PARAM_FULL --> true : ÆÄ¶ó¸ÞÅÍ ´Ù ÀâÀ½, false : ÆÄ¶ó¸ÞÅÍ ÀâÁö¾ÊÀ½
//dtCHARCASE --> true : ´ë¼Ò¹®ÀÚ±¸º°, false : ´ë¼Ò¹®ÀÚ ±¸º°¾ÈÇÔ
//DTWILDCARD --> ÆÄ¶ó¸ÞÅÍ ºÐ¼®½Ã Æú´õ¸íÀº Æ²·Áµµ ÆÄÀÏ¸íÀÌ³ª ÆÄ¶ó¸ÞÅÍ°¡ °°À»¶§ »ç¿ë
//rstrPURL[arridx++] = "http://datathink.co.kr/"+DTWILDCARD+"/com01.html?a=&b=";

//// USER SETTING ////

var KEYWORD_NAME = "dtkwd";
var DEBUG_FLAG = false;
var PARAM_FULL = false;  
var FIXED_URL = true;  

var dtPAGETYPE = PAGETYPE_NORMAL; 
var dtGATHERSERVER = "gs2.datathink.co.kr";
var dtCHARCASE = true;	
var dtSITEID = 176;


//// URL SET ////

///µ¿¾Æ ÀÚ¸ÅÁö
arridx = 0;
var rstrHost = new Array();
rstrHost[arridx++] = "donga.com";

arridx = 0;
var rstrPURL = new Array();


arridx = 0;
var rstrFURL = new Array();
rstrFURL[arridx++] = "http://kids.donga.com/game/";
rstrFURL[arridx++] = "http://kids.donga.com/vl.html";
rstrFURL[arridx++] = "http://kids.donga.com/vl20.html";
rstrFURL[arridx++] = "http://kids.donga.com/vl30.html";
rstrFURL[arridx++] = "http://kids.donga.com/v40s10.html";
rstrFURL[arridx++] = "http://kids.donga.com/vl60.html";
rstrFURL[arridx++] = "http://kids.donga.com/";
rstrFURL[arridx++] = "http://www.donga.com/e-county/commbbs/common_bbs/cbbs_list.md?bkind=080704";
rstrFURL[arridx++] = "http://women.donga.com/";
rstrFURL[arridx++] = "http://shindonga.donga.com/";
rstrFURL[arridx++] = "http://weekly.donga.com/";

rstrFURL[arridx++] = "http://donga.com/docs/magazine/woman/";
rstrFURL[arridx++] = "http://donga.com/docs/magazine/woman_donga/";
rstrFURL[arridx++] = "http://donga.com/docs/magazine/viewer.php?mgz_part=woman&n=";
rstrFURL[arridx++] = "http://donga.com/docs/magazine/shin/";
rstrFURL[arridx++] = "http://donga.com/docs/magazine/new_donga/";
rstrFURL[arridx++] = "http://donga.com/docs/magazine/viewer.php?mgz_part=shin&n=";
rstrFURL[arridx++] = "http://donga.com/docs/magazine/weekly/";
rstrFURL[arridx++] = "http://donga.com/docs/magazine/weekly_donga/";
rstrFURL[arridx++] = "http://donga.com/docs/magazine/viewer.php?mgz_part=weekly&n=";
rstrFURL[arridx++] = "http://donga.com/";

rstrFURL[arridx++] = "http://www.donga.com/docs/magazine/woman/";
rstrFURL[arridx++] = "http://www.donga.com/docs/magazine/woman_donga/";
rstrFURL[arridx++] = "http://www.donga.com/docs/magazine/viewer.php?mgz_part=woman&n=";
rstrFURL[arridx++] = "http://www.donga.com/docs/magazine/shin/";
rstrFURL[arridx++] = "http://www.donga.com/docs/magazine/new_donga/";
rstrFURL[arridx++] = "http://www.donga.com/docs/magazine/viewer.php?mgz_part=shin&n=";
rstrFURL[arridx++] = "http://www.donga.com/docs/magazine/weekly/";
rstrFURL[arridx++] = "http://www.donga.com/docs/magazine/weekly_donga/";
rstrFURL[arridx++] = "http://www.donga.com/docs/magazine/viewer.php?mgz_part=weekly&n=";
rstrFURL[arridx++] = "http://www.donga.com/";

rstrFURL[arridx++] = "http://www2.donga.com/docs/magazine/woman/";
rstrFURL[arridx++] = "http://www2.donga.com/docs/magazine/woman_donga/";
rstrFURL[arridx++] = "http://www2.donga.com/docs/magazine/viewer.php?mgz_part=woman&n=";
rstrFURL[arridx++] = "http://www2.donga.com/docs/magazine/shin/";
rstrFURL[arridx++] = "http://www2.donga.com/docs/magazine/new_donga/";
rstrFURL[arridx++] = "http://www2.donga.com/docs/magazine/viewer.php?mgz_part=shin&n=";
rstrFURL[arridx++] = "http://www2.donga.com/docs/magazine/weekly/";
rstrFURL[arridx++] = "http://www2.donga.com/docs/magazine/weekly_donga/";
rstrFURL[arridx++] = "http://www2.donga.com/docs/magazine/viewer.php?mgz_part=weekly&n=";
rstrFURL[arridx++] = "http://www2.donga.com/";




//// TAG CALL ////
var oTag = new clsDatathinkTag(dtGATHERSERVER, dtCHARCASE, rstrHost, rstrPURL, dtSITEID, dtPAGETYPE);
oTag.doTagging();
 
