// clickcr.js, Version 1.0.5
// Lee Daebeom, 2008.8.14

/* Global variable */
var detect = navigator.userAgent.toLowerCase();
var isSafari = (detect.indexOf('safari') != -1 ? true : false);
var isOpera = (detect.indexOf('opera') != -1 ? true : false);
var max_depth = 4; // Maximum depth of searching for Parent id  
var server = "cc.naver.com";
var module = "cc";
if (!nsc) {var nsc = "shopping.main";}

// Function Name : clickcr
// paramenter : obj-  owner of event occurence object, area - click area,  cid - gdID or cid, rank - rank in area, event - predefined event object
// Description : When users click link, this function is called. It request to the server, then the server log data.
function clickcr(obj, area, cid, rank, evt) {
	var p1, p2, p1_id, p2_id, ptarr;
	var pt = "";
	var theEvent = window.event ? window.event : evt;
	var sx = sy = px = py = -1;
	var dBody, dElement, ifrId;
	var mode, clink;
	var o, x, y, w;
	var temp;

	try {
		w = xWindowSize(window);	// size of window
		ifrId = checkIframe(obj);	// check whether it is clicked in iframe or not
		if (ifrId) {	// click object in iframe
			var ifrOffset = findPos(document.getElementById(ifrId));	// Get position of iframe
			if (theEvent.clientX  && theEvent.clientX != "undefined") {
				dBody = document.body;
			    if (dBody.clientLeft && dBody.clientTop) {
					ifrSx = theEvent.clientX - dBody.clientLeft;		//  relative position in iframe
					ifrSy = theEvent.clientY - dBody.clientTop;
			    } else { // firefox bug - clientLeft, clientTop don't work in firefox. It is OK in firefox 3.0
					ifrSx = theEvent.clientX;
					ifrSy = theEvent.clientY;
				}
			}
			// postion of iframe + relative position in iframe
			px = ifrOffset[0] + ifrSx;
			py = ifrOffset[1] + ifrSy;

			// relative position in window
			if (document.body && (document.body.scrollTop || document.body.scrollLeft)) {
				dBody = document.body;
				sx = px - dBody.scrollLeft;
				sy = py - dBody.scrollTop;	
			} else if (document.documentElement && (document.documentElement.scrollTop || document.documentElement.scrollLeft)) {
				dElement = document.documentElement;
				sx = px - dElement.scrollLeft;
				sy = py - dElement.scrollTop;
			} else {
				sx = px;
				sy = py;
			}
		} else {	// normal click object
			if (theEvent.clientX  && theEvent.clientX != "undefined") {
				dBody = document.body;
			    if (dBody.clientLeft && dBody.clientTop) {
					sx = theEvent.clientX - dBody.clientLeft;		// relative position in window
					sy = theEvent.clientY - dBody.clientTop;
			    } else { // firefox bug - clientLeft, clientTop don't work in firefox. It is OK in firefox 3.0
					sx = theEvent.clientX;
					sy = theEvent.clientY;
				}
			}

			// IE calculates (clientX,clientY) relativ to window, not content.
			if (document.body && (document.body.scrollTop || document.body.scrollLeft)) {
				px = document.body.scrollLeft + (sx < 0 ? 0: sx);	
				py = document.body.scrollTop + (sy < 0 ? 0: sy);				
			} else if (document.documentElement && (document.documentElement.scrollTop || document.documentElement.scrollLeft)) {
				dElement = document.documentElement;
				if (dElement.scrollLeft !="undefined") px = dElement.scrollLeft + (sx < 0 ? 0: sx);	
				if (dElement.scrollTop !="undefined") py = dElement.scrollTop + (sy < 0 ? 0: sy);			
			} else {
				px = (sx < 0 ? 0: sx);
				py = (sy < 0 ? 0: sy);
			}
			
			if (theEvent.pageX) { px = theEvent.pageX; }
			if (theEvent.pageY) { py = theEvent.pageY; }
		}
	} catch (e) {
	}

	if (area != "") {
		ptarr = area.split(".");
		pt = ptarr[0] +"."+ ptarr[1];
	} else {
		x = obj.parentNode;
		y = x.parentNode;
		
		p2 = getparent(obj);
		if (p2 == null) {
			return false;
		}
		p1 = getparent(p2);
		if (p1 == null) {
			return false;
		}
		pt = p1.id + "." + p2.id;
	}

	// Case of no redirection
	// 1. Open link to new window or target of other window or object of its window ( ex. iframe) 
	// 2. Use javascript scheme (javascript:)
	// 3. Use fragment at the first character of href (ex. #top)
	// 4. No use href
	if (obj.href) {
		if ((obj.target && obj.target != "_self") || (obj.href.toLowerCase().indexOf("javascript:") != -1) 
			|| obj.getAttribute("href",2).charAt(0) == '#' 
			|| (obj.href.indexOf("#") != -1 && (obj.href.substr(0,obj.href.indexOf("#")) == document.URL))) {
			mode = 0;
		} else {	// Case of redirection - Open link to its window (no target, _self)
			mode = 1;
		}
	} else {
		mode = 0;
	}

	if (obj.href) {
		if (obj.href.indexOf("http://"+server) == 0) {
			clink = obj.href;
		} else {
			clink = "http://" + server + "/"+ module + "?a=" + pt + "&r=" + rank + "&i=" + cid + "&nsc=" + nsc + "&w=" + w + "&px="+ px + "&py=" + py + "&sx="+ sx + "&sy=" + sy + "&m=" + mode + "&u="+encodeURIComponent(obj.href);
		}
	} else {
		clink = "http://" + server + "/"+ module + "?a=" + pt + "&r=" + rank + "&i=" + cid + "&nsc=" + nsc + "&w=" + w + "&px="+ px + "&py=" + py + "&sx="+ sx + "&sy=" + sy + "&m=" + mode + "&u=''";
	}

	if (mode == 1)  {	// Redirection
		temp = obj.innerHTML;
		obj.href = clink;
		
		if (obj.innerHTML != temp) {
			obj.innerHTML = temp;
			obj.innerHTML = temp;
		}
	} else if (document.images)  {	// No redirection
		var timestr = new Date().getTime();
		clink += "&time="+ timestr;		// Aviod image cache

		if (isSafari && !obj.href) {
			var b = c = new Date();
			while ((b.getTime() - c.getTime()) < 100) b = new Date();
			(new Image()).src = clink;
		} else {
			(new Image()).src = clink;
		}
	}

	return true;
}

// Function Name : getparent
// paramenter : obj-  owner of event occurence object
// Description : Get id of parent element
function getparent(obj) {
	var p = obj.parentNode;
	var depth = 0;
	while (1) {
		if ( p.id != null && p.id != "") {
			return p;
		}
		else {
			depth++;
			p = p.parentNode;
		}
		if (depth >= max_depth) {
			return null;
		}
	}
}

// Function Name : xWindowSize
// paramenter : win -  window object
// Description : Calculates inner width of browser window.
 function xWindowSize(win) {
	if (!win) win = window;
	var winWidth = 0;
	if (win.innerWidth) {
		// most non-IE
		winWidth = win.innerWidth;
		// including scroll bar !! //
		if ( typeof(win.innerWidth) == 'number') {
			var scrollbarWidth = getScrollBarWidth();
			winWidth = win.innerWidth - scrollbarWidth; // Opera includes scrollbar width at innerWidth
		}
	} else if (document.documentElement && document.documentElement.clientWidth) {
		//IE 6+ in 'standards compliant mode'
		winWidth = document.documentElement.clientWidth; 
	} else if( document.body && ( document.body.clientWidth || document.body.clientHeight ) ) {
		//IE 4 compatible
		winWidth = document.body.clientWidth; 
	}
	return winWidth; 
}

// Function Name : getScrollBarWidth
// Description : Get scrollbar width in order to calculate browser size of Opera.
function getScrollBarWidth () {
	var inner = document.createElement('p');
	inner.style.width = '200px';
	inner.style.height = '200px';

	var outer = document.createElement('div');
	outer.style.position = 'absolute';
	outer.style.top = '0px';
	outer.style.left = '0px';
	outer.style.visibility = 'hidden';
	outer.style.width = '200px';
	outer.style.height = '150px';
	outer.style.overflow = 'hidden';
	outer.appendChild (inner);

	document.body.appendChild (outer);
	var w1 = inner.offsetWidth;
	outer.style.overflow = 'scroll';
	var w2 = inner.offsetWidth;

	if (w1 == w2) w2 = outer.clientWidth;

	document.body.removeChild (outer);

	return (w1 - w2);
}

// Function Name : findPos
// Parameter : obj - owner of event occurence object
// Description : Get offsetLeft, offsetTop
function findPos(obj) {
	var curleft = curtop = 0;

	if (obj.offsetParent) {
		do {
			curleft += obj.offsetLeft;
			curtop += obj.offsetTop;
		} while (obj = obj.offsetParent);
	}
	else if (obj.x || obj.y)			// for safari of old version
	{
		if (obj.x) curleft += obj.x;
		if (obj.y) curtop += obj.y;
	}
	return [curleft, curtop];
}

// Function Name : checkIframe
// Parameter : obj - owner of event occurence object
// Return Value : iframe ID or false
// Description : Check whether it is clicked in iframe or not
function checkIframe(obj) {
	var oriURL = document.URL;
	var p = obj.parentNode;
	var docObj;
	var ifrId;
	
	while (1) {
		if (p.nodeName.toLowerCase() == "#document") {
			if (p.parentWindow) {		// IE, Opera
				docObj = p.parentWindow;
			} else {	// Firefox, Safari
				docObj = p.defaultView;
			}
			
			if (docObj.frameElement != null && docObj.frameElement != "undefined" ) {	
				if (docObj.frameElement.nodeName.toLowerCase() == "iframe") {
					ifrId = docObj.frameElement.id;	// Get iframe id
					if (!ifrId) return false;
					return ifrId;					
				} else {
					return false;
				}
			} else {
				return false;
			}
		} else {
			p = p.parentNode;
			if (p == null || p == "undefined") return false;
		}
	}
}