var browser = new Browser();
var dragObj = new Object();
dragObj.zIndex = 0;
var iebody=(document.compatMode && document.compatMode != "BackCompat")? document.documentElement : document.body
var dsocleft=document.all? iebody.scrollLeft : pageXOffset
var dsoctop=document.all? iebody.scrollTop : pageYOffset
var xMousePos = 0; // Horizontal position of the mouse on the screen
var yMousePos = 0; // Vertical position of the mouse o	n the screen
var xMousePosMax = 0; // Width of the page
var yMousePosMax = 0; // Height of the page
var PopupLeft = 0;
var PopupTop = 0;
var loadedobjects=""
var rootdomain="http://"+window.location.hostname
var curPopupEventWindow;

// initialize hacks whenever the page loads
window.onload = initializeHacks;

function Browser() {
  var ua, s, i;
  this.isIE    = false;
  this.isNS    = false;
  this.version = null;
  ua = navigator.userAgent;
  s = "MSIE";
  if ((i = ua.indexOf(s)) >= 0) {
    this.isIE = true;
    this.version = parseFloat(ua.substr(i + s.length));
    return;
  }

  s = "Netscape6/";
  if ((i = ua.indexOf(s)) >= 0) {
    this.isNS = true;
    this.version = parseFloat(ua.substr(i + s.length));
    return;
  }

  // Treat any other "Gecko" browser as NS 6.1.
  s = "Gecko";
  if ((i = ua.indexOf(s)) >= 0) {
    this.isNS = true;
    this.version = 6.1;
    return;
  }
}

// Global object to hold drag information.
function dragStart(event, id) {
	var el;
  	var x, y;
  	// If an element id was given, find it. Otherwise use the element being
  	// clicked on.

  	if (id)
    		dragObj.elNode = document.getElementById(id);
  	else {
    		if (browser.isIE)
      		dragObj.elNode = window.event.srcElement;
    		if (browser.isNS)
      		dragObj.elNode = event.target;

    		// If this is a text node, use its parent element.
	    if (dragObj.elNode.nodeType == 3)
     		dragObj.elNode = dragObj.elNode.parentNode;
  	}
	// Get cursor position with respect to the page.
	if (browser.isIE) {
		x = window.event.clientX + document.documentElement.scrollLeft + document.body.scrollLeft;
    		y = window.event.clientY + document.documentElement.scrollTop + document.body.scrollTop;
  	}
  	if (browser.isNS) {
    		x = event.clientX + window.scrollX;
    		y = event.clientY + window.scrollY;
  	}
	// Save starting positions of cursor and element.
	dragObj.cursorStartX = x;
  	dragObj.cursorStartY = y;
  	dragObj.elStartLeft  = parseInt(dragObj.elNode.style.left, 10);
  	dragObj.elStartTop   = parseInt(dragObj.elNode.style.top,  10);

  	if (isNaN(dragObj.elStartLeft)) dragObj.elStartLeft = 0;
  	if (isNaN(dragObj.elStartTop))  dragObj.elStartTop  = 0;

  	// Update element's z-index.
	dragObj.elNode.style.zIndex = ++dragObj.zIndex;
	// Capture mousemove and mouseup events on the page.
	if (browser.isIE) {
		document.attachEvent("onmousemove", dragGo);
    		document.attachEvent("onmouseup",   dragStop);
		window.event.cancelBubble = true;
    		window.event.returnValue = false;
  	}
  	if (browser.isNS) {
		document.addEventListener("mousemove", dragGo,   true);
    		document.addEventListener("mouseup",   dragStop, true);
    		event.preventDefault();
  	}
}

function dragGo(event) {
	var x, y;
	// Get cursor position with respect to the page.
	if (browser.isIE) {
		x = window.event.clientX + document.documentElement.scrollLeft + document.body.scrollLeft;
    		y = window.event.clientY + document.documentElement.scrollTop + document.body.scrollTop;
  	}
  	if (browser.isNS) {
    		x = event.clientX + window.scrollX;
    		y = event.clientY + window.scrollY;
  	}
	// Move drag element by the same amount the cursor has moved.
	dragObj.elNode.style.left = (dragObj.elStartLeft + x - dragObj.cursorStartX) + "px";
  	dragObj.elNode.style.top  = (dragObj.elStartTop  + y - dragObj.cursorStartY) + "px";

	if (browser.isIE) {
		window.event.cancelBubble = true;
		window.event.returnValue = false;
  	} else if (browser.isNS) {
		event.preventDefault();
	}
    
	PopupLeft = dragObj.elNode.style.left;
	PopupTop = dragObj.elNode.style.top;
}

function dragStop(event) {

  // Stop capturing mousemove and mouseup events.
  if (browser.isIE) {
    document.detachEvent("onmousemove", dragGo);
    document.detachEvent("onmouseup",   dragStop);
  }
  if (browser.isNS) {
    document.removeEventListener("mousemove", dragGo,   true);
    document.removeEventListener("mouseup",   dragStop, true);
  }
}

function trigMouseCapture() {
	if (document.layers) 
	{ // Netscape
		document.captureEvents(Event.MOUSEMOVE);
    		document.onmousemove = captureMousePosition;
	} else if (document.all) { // Internet Explorer
		document.onmousemove = captureMousePosition;
	} else if (document.getElementById) { // Netcsape 6
		document.onmousemove = captureMousePosition;
	}
}	

function ajaxpage(url, containerid)
{
	var page_request = false
	if (window.XMLHttpRequest) { // if Mozilla, Safari etc
		page_request = new XMLHttpRequest()
	} else if (window.ActiveXObject){ // if IE
		try {
			page_request = new ActiveXObject("Msxml2.XMLHTTP")
		} catch (e){
			try{
				page_request = new ActiveXObject("Microsoft.XMLHTTP")
			} catch (e){}
		}
	} else {
		return false
	}
	page_request.onreadystatechange=function(){
		loadpage(page_request, containerid)
	}
	page_request.open('GET', url, true)
	page_request.send(null)
}


function showDivXYLife(showLayer, hideLayer) {
	trigMouseCapture();
	if (document.getElementById) 
	{
		if(document.getElementById(showLayer)!=null) 
		{
			document.getElementById(showLayer).style.left=xMousePos;
			document.getElementById(showLayer).style.top=yMousePos3;
			document.getElementById(showLayer).style.visibility="visible";
		}
		if(document.getElementById(hideLayer)!=null) {
			document.getElementById(hideLayer).style.visibility="hidden";
		}
	} else {
		if (document.layers) { // Netscape 4
			document.layers[showLayer].display = 'visible';
			document.layers[showLayer].pageX = yMousePos-55;
			document.layers[showLayer].pageY = xMousePos+5;
		} 
	}
	PopupLeft = xMousePos;
	PopupTop = yMousePos3;
}

function showDivInnerPopular(pass) {
	trigMouseCapture();
	var divs = document.getElementsByTagName('div');

	for(i=0;i<divs.length;i++){
		if(divs[i].id == pass){
			if (document.getElementById) {
				divs[i].style.left=xMousePos;
				divs[i].style.top=yMousePos3;
				divs[i].style.visibility="visible";
			} else {
				if (document.layers) { // Netscape 4
						divs[i].display = 'visible';
						divs[i].pageX = yMousePos-55;
						divs[i].pageY = xMousePos+5;
				}
			}
		}
	}
	PopupLeft = xMousePos;
	PopupTop = yMousePos3;
}

function showEventPlannerPopup(pass, e) {
	//scrollingDetector();
	var divs = document.getElementsByTagName('div');
	var curYoffset;
	var curXoffset;
	//captureMousePosition(e);
	if (navigator.appName == "Microsoft Internet Explorer")
	{
			curYoffset = document.body.scrollTop;
			//curXoffset = document.body.scroll;
  }
	else
	{
		curYoffset = window.pageYOffset;
		//curXoffset = window.pageXOffset;
	}

	for(i=0;i<divs.length;i++){
		if(divs[i].id == pass)
		{
			if (document.getElementById) {
			  if (curPopupEventWindow != null)
			  	curPopupEventWindow.style.visibility="hidden";
				document.getElementById(pass).style.left= 170;
				document.getElementById(pass).style.top = yMousePos;
				document.getElementById(pass).style.visibility="visible";
				curPopupEventWindow = document.getElementById(pass);
			} else {
				if (document.layers) { // Netscape 4
					
			    if (curPopupEventWindow != null)
			  	  curPopupEventWindow.display = "hidden";
					document.layers[divs[i]].display = 'visible';
					document.layers[divs[i]].pageX = yMousePos-85;
					document.layers[divs[i]].pageY = xMousePos+5;
					curPopupEventWindow = document.layers[divs[i]];
				} else {// IE 4
					
			    if (curPopupEventWindow != null)
			  	  curPopupEventWindow.visibility = "hidden";
					document.all.hideshow.divs[i].visibility = 'visible';
					document.all.hideshow.divs[i].top=yMousePos-85;
					document.all.hideshow.divs[i].left=xMousePos+5;
					curPopupEventWindow = document.all.hideshow.divs[i];
				}
			}
		}
	}
}

function alertSize() {
  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;
  }
}

function showPage(pageNumberToDisplay) {
	var elementId = pageNumberToDisplay;
	document.getElementById(elementId).style.display="inline";
}

function hidePage(pageNumberToDisplay) {
	var elementId = pageNumberToDisplay;
	document.getElementById(elementId).style.display="none";
}

function ajaxPage(url, containerId, xmlId, xslId, type) {
	var req = false;
	if (window.XMLHttpRequest) { // if Mozilla, Safari etc
		req = new XMLHttpRequest();
	} else if (window.ActiveXObject){ // if IE
		try {
			req = new ActiveXObject("Msxml2.XMLHTTP");
		} catch (e){
			try{
				req = new ActiveXObject("Microsoft.XMLHTTP");
			} catch (e){}
		}
	} else {
		return false;
	}

	if (type == "xml") {
		req.onreadystatechange = function() {
			loadXmlPage(req, containerId, xmlId, xslId);
		};
	} else {
		req.onreadystatechange = function() {
			loadHtmlPage(req, containerId);
		};
	}
	req.open('GET', url, true);
	req.send(null);
}

function ajaxLifePage(url, containerId, xmlId, xslId, type, lifePrefix) {
	var req = false;
	if (window.XMLHttpRequest) { // if Mozilla, Safari etc
		req = new XMLHttpRequest();
	} else if (window.ActiveXObject){ // if IE
		try {
			req = new ActiveXObject("Msxml2.XMLHTTP");
		} catch (e){
			try{
				req = new ActiveXObject("Microsoft.XMLHTTP");
			} catch (e){}
		}
	} else {
		return false;
	}

	if (type == "xml") {
		req.onreadystatechange = function() {
			loadXmlPage(req, containerId, xmlId, xslId,lifePrefix);
		};
	} else {
		req.onreadystatechange = function() {
			loadHtmlPage(req, containerId,lifePrefix);
		};
	}

	req.open('GET', url, true);
	req.send(null);
}

function loadHtmlPage(req, containerId) {
	var rtnStr = "<span class=\"footer_text\">Loading...</span>";
	if (req.readyState == 4 ) {
		if( req.status == 200) {
			rtnStr = req.responseText;
		} else {
			rtnStr = "<span class=\"footer_text\">Error processing your request. Please try again.</span>";
		}
	}
	if(document.getElementById(containerId)!='undefined') 
	{
		document.getElementById(containerId).innerHTML = rtnStr;
	}
}

function loadXmlPage(req, containerId, xmlId, xslId) {
	var rtnStr = "<span class=\"footer_text\">Loading...</span>";
	if (req.readyState == 4 ) {
		if( req.status == 200) {
			rtnStr = "<xml id=\""+xmlId+"\">"+req.responseText+"</xml>";
			//document.getElementById(containerId).innerHTML = "<xml id=\""+xmlId+"\">"+req.responseText+"</xml>";
			//transformXmlPage(containerId, xmlId, xslId);
		} else {
			rtnStr = "<span class=\"footer_text\">Error processing your request. Please try again.</span>";
		}
	}
	if(document.getElementById(containerId)!='undefined') 
	{
		document.getElementById(containerId).innerHTML = rtnStr;
		transformXmlPage(containerId, xmlId, xslId);
	}
	
}

function transformXmlPage(containerId, xmlId, xslId) {
	if (document.getElementById(xslId).readyState == "complete") {
		if (document.getElementById(xmlId).readyState == "complete") {
			document.getElementById(containerId).innerHTML = document.getElementById(xmlId).transformNode(document.getElementById(xslId).XMLDocument);
		} else {
			document.getElementById(xmlId).ondatasetcomplete = function () {
				document.getElementById(containerId).innerHTML = document.getElementById(xmlId).transformNode(document.getElementById(xslId).XMLDocument);
			};
		}
	} else {
		document.getElementById(xslId).ondatasetcomplete = function () {
			transformXmlPage(containerId, xmlId, xslId);
		}		
	}
}

function addYear(fromdate,numyear)
{
	var d = fromdate;
 	d.setFullYear(d.getFullYear() + numyear);
 	return d;
}

function setCookie(name, value, expires, path, domain, secure) {
	var curCookie = name + "=" + value + ";" + "path=" + path + ";" + "domain=" + domain;
	document.cookie = curCookie;
	//  alert("SetCookie : ["+ name +", " + value + "]");
}

function getCookie(name) {
	var dc = document.cookie;
	var prefix = name + "=";
	var begin = dc.indexOf("; " + prefix);
	if (begin == -1) {
		begin = dc.indexOf(prefix);
		if (begin != 0) return null;
	} else
		begin += 2;
	var end = document.cookie.indexOf(";", begin);
	if (end == -1)
    		end = dc.length;
	return unescape(dc.substring(begin + prefix.length, end));
}

function deleteCookie(name, path, domain) {
  if (getCookie(name)) {
    document.cookie = name + "=" +
    ((path) ? "; path=" + path : "") +
    ((domain) ? "; domain=" + domain : "") +
    "; expires=Thu, 01-Jan-70 00:00:01 GMT";
  }
}

function image_pop(page,section){
var winl = (screen.width - 800) / 2;
var wint = (screen.height - 600) / 2;
	str = "toolbar=no,location=no,directories=no,status=no,menubar=no,scrollbars=yes,resizable=yes,width=800,height=600"+",top="+wint+",left="+winl;
	cpjob = window.open(page,section,str);
	cpjob.focus();
}

function hideDiv() {
	
	var divs = document.getElementsByTagName('div');
	for(i=0;i<divs.length;i++)
	{
		if(divs[i].id.substring(0,10).match('desc_popup')){
			if (document.getElementById) // DOM3 = IE5, NS6
					divs[i].style.visibility = 'hidden';// show/hide
			else if (document.layers) // Netscape 4
					document.layers[divs[i]].display = 'hidden';
			else // IE 4
					document.all.hideshow.divs[i].visibility = 'hidden';
		}
	}
}

function hideCurrentPopup() {
    // note: we've stored the currently-visible popup on the global object window.currentlyVisiblePopup
    if(window.currentlyVisiblePopup) {
	changeObjectVisibility(window.currentlyVisiblePopup, 'hidden');
	window.currentlyVisiblePopup = false;
    }
} // hideCurrentPopup

function initializeHacks() {
    // this ugly little hack resizes a blank div to make sure you can click
    // anywhere in the window for Mac MSIE 5
    if ((navigator.appVersion.indexOf('MSIE 5') != -1) 
	&& (navigator.platform.indexOf('Mac') != -1)
	&& getStyleObject('blankDiv')) {
	window.onresize = explorerMacResizeFix;
    }
    // this next function creates a placeholder object for older browsers
    createFakeEventObj();
    resizeBlankDiv();
}

function createFakeEventObj() {
    // create a fake event object for older browsers to avoid errors in function call
    // when we need to pass the event object to functions
    if (!window.event) {
	window.event = false;
    }
} // createFakeEventObj

function resizeBlankDiv() {
    // resize blank placeholder div so IE 5 on mac will get all clicks in window
    if ((navigator.appVersion.indexOf('MSIE 5') != -1) 
	&& (navigator.platform.indexOf('Mac') != -1)
	&& getStyleObject('blankDiv')) {
	getStyleObject('blankDiv').width = document.body.clientWidth - 20;
	getStyleObject('blankDiv').height = document.body.clientHeight - 20;
    }
}

function explorerMacResizeFix () {
    location.reload(false);
}

// ************************
// layer utility routines *
// ************************

function checkObject(objectId) {
    // cross-browser function to get an object's style object given its id
    if(document.getElementById && document.getElementById(objectId)) {
		return true;
    } else if (document.all && document.all(objectId)) {
	// MSIE 4 DOM
		return true;
    } else if (document.layers && document.layers[objectId]) {
	// NN 4 DOM.. note: this won't find nested layers
		return true;
    } else {
		return false;
    }
}	

function getStyleObject(objectId) {
    // cross-browser function to get an object's style object given its id
    if(document.getElementById && document.getElementById(objectId)) {
	// W3C DOM
	return document.getElementById(objectId).style;
    } else if (document.all && document.all(objectId)) {
	// MSIE 4 DOM
	return document.all(objectId).style;
    } else if (document.layers && document.layers[objectId]) {
	// NN 4 DOM.. note: this won't find nested layers
	return document.layers[objectId];
    } else {
	return false;
    }
} // getStyleObject

function changeObjectVisibility(objectId, newVisibility) {
    // get a reference to the cross-browser style object and make sure the object exists
    var styleObject = getStyleObject(objectId);
    if(styleObject) {
	styleObject.visibility = newVisibility;
	return true;
    } else {
	// we couldn't find the object, so we can't change its visibility
	return false;
    }
} // changeObjectVisibility

function moveObject(objectId, newXCoordinate, newYCoordinate) {
    // get a reference to the cross-browser style object and make sure the object exists
    var styleObject = getStyleObject(objectId);
    if(styleObject) {
	styleObject.left = newXCoordinate;
	styleObject.top = newYCoordinate;
	return true;
    } else {
	// we couldn't find the object, so we can't very well move it
	return false;
    }
} // moveObject

function getObjPos (obj) {
	var pos = {x: obj.offsetLeft||0, y: obj.offsetTop||0};
	while(obj = obj.offsetParent) {
		pos.x += obj.offsetLeft||0;
		pos.y += obj.offsetTop||0;
	}
	return pos;
}

function captureMousePosition(e) {
    if (document.layers) {
        // When the page scrolls in Netscape, the event's mouse position
        // reflects the absolute position on the screen. innerHight/Width
        // is the position from the top/left of the screen that the user is
        // looking at. pageX/YOffset is the amount that the user has
        // scrolled into the page. So the values will be in relation to
        // each other as the total offsets into the page, no matter if
        // the user has scrolled or not.
        xMousePos = e.pageX+5 - 300;
        //yMousePos = e.pageY-85;
        yMousePos = e.pageY-55;
        xMousePosMax = window.innerWidth+window.pageXOffset;
        yMousePosMax = window.innerHeight+window.pageYOffset;
    } else if (document.all) {
        // When the page scrolls in IE, the event's mouse position
        // reflects the position from the top/left of the screen the
        // user is looking at. scrollLeft/Top is the amount the user
        // has scrolled into the page. clientWidth/Height is the height/
        // width of the current page the user is looking at. So, to be
        // consistent with Netscape (above), add the scroll offsets to
        // both so we end up with an absolute value on the page, no
        // matter if the user has scrolled or not.
	   var iebody=(document.compatMode && document.compatMode != "BackCompat")? document.documentElement : document.body
        xMousePos = window.event.x+5+iebody.scrollLeft - 300;
        yMousePos = window.event.y-85+iebody.scrollTop;
        yMousePos2 = window.event.y-75+iebody.scrollTop;
        yMousePos3 = window.event.y-42+iebody.scrollTop + 55;
        xMousePosMax = document.body.clientWidth+document.body.scrollLeft;
        yMousePosMax = document.body.clientHeight+document.body.scrollTop;
    } else if (document.getElementById) {
        // Netscape 6 behaves the same as Netscape 4 in this regard
        xMousePos = (e.pageX+5 - 300) + "px";
        yMousePos = (e.pageY-75) + "px";
        yMousePos2 = (e.pageY-75) + "px";
        yMousePos3 = (e.pageY-42 + 55) + "px";
        xMousePosMax = window.innerWidth+window.pageXOffset;
        yMousePosMax = window.innerHeight+window.pageYOffset;
    }
}

function submitQuickSearch() {
	keywordObj.value = trim(keywordObj.value);
	checkKeyword();
	if (keywordObj.value == "") {
		keywordObj.style.color = "red";
		typeit();
		return false;
	} else {		
		if (nextchar!=-1) {
			return false;
		} else {			
			if(document.getElementById("searchType").value == "2"){
				document.getElementById("frm_quicksearch").keyword.value = document.getElementById("frm_quicksearch").keyword.value;
				document.getElementById("frm_quicksearch").action="http://archive.scmp.com/quick_search.php";
			}else{
				document.getElementById("frm_quicksearch").action="/portal/site/SCMP/template.JSP_INCLUDE_PAGE/page.scmp_jsp_include_page/";
			}		
			document.getElementById("frm_quicksearch").submit();
			return true;
		}
	}
}

function enterSubmission(e){	    
	if(e){
		e = e;
	} else {
		e = window.event;
	}

	if(e.which){
		var keycode = e.which;
	} else {
		var keycode = e.keyCode;
	}	
	if(keycode == 13) {	
		 return submitQuickSearch();
	}
}

function checkKeyword(){
	if (keywordObj.value == errMessage) {
		keywordObj.style.color = "";
		keywordObj.value = "";
	}
}
function nextstep(){
	nextchar++;
	temp+=errMessage.charAt(nextchar);

	if (cursor=="\\"){
		cursor="|"
	}else if (cursor=="|")
	{
		cursor="/";
	}else if (cursor=="/")
	{
		cursor="-";
	}else if (cursor=="-")
	{
		cursor="\\";
	}

	if (nextchar == errMessage.length)
	{
		cursor="";
	}	
	keywordObj.value=temp+cursor;
	setTimeout("typeit()",30);
	return;
}
function typeit(){
	if (temp==errMessage & temp.length==errMessage.length) 
	{
		nextchar=-1;
		keywordObj.value=temp;
		temp="";
	} else {
		setTimeout("nextstep()",30);
	}
}
function trim(stringToTrim) {
	return stringToTrim.replace(/^\s+|\s+$/g,"");
}


