String.prototype.trim = function () {
    return this.replace(/^\s*/, "").replace(/\s*$/, "");
}

function not_implemented() 
{
    alert("Sorry, this feature is not implemented.");
}


function findPosX(obj)
{
    var curleft = 0;
    if(obj.offsetParent)
        while(1) 
        {
          curleft += obj.offsetLeft;
          if(!obj.offsetParent)
            break;
          obj = obj.offsetParent;
        }
    else if(obj.x)
        curleft += obj.x;
    return curleft;
}

function findPosY(obj)
{
    var curtop = 0;
    if(obj.offsetParent)
        while(1)
        {
          curtop += obj.offsetTop;
          if(!obj.offsetParent)
            break;
          obj = obj.offsetParent;
        }
    else if(obj.y)
        curtop += obj.y;
    return curtop;
}

function copyToClipboard(s)
{
	if( window.clipboardData && clipboardData.setData )
	{
		clipboardData.setData("Text", s);
	}
	else
	{
		// You have to sign the code to enable this or allow the action in about:config by changing
		user_pref("signed.applets.codebase_principal_support", true);
		netscape.security.PrivilegeManager.enablePrivilege('UniversalXPConnect');

		var clip = Components.classes['@mozilla.org/widget/clipboard;[[[[1]]]]'].createInstance(Components.interfaces.nsIClipboard);
		if (!clip) return;

		// create a transferable
		var trans = Components.classes['@mozilla.org/widget/transferable;[[[[1]]]]'].createInstance(Components.interfaces.nsITransferable);
		if (!trans) return;

		// specify the data we wish to handle. Plaintext in this case.
		trans.addDataFlavor('text/unicode');

		// To get the data from the transferable we need two new objects
		var str = new Object();
		var len = new Object();

		var str = Components.classes["@mozilla.org/supports-string;[[[[1]]]]"].createInstance(Components.interfaces.nsISupportsString);

		var copytext=meintext;

		str.data=copytext;

		trans.setTransferData("text/unicode",str,copytext.length*[[[[2]]]]);

		var clipid=Components.interfaces.nsIClipboard;

		if (!clip) return false;

		clip.setData(trans,null,clipid.kGlobalClipboard);	   
	}
}
	
function popWindow(url) {
	popupWindow = window.open(url,'popUpWindow','height=380, width=550, left=100, top=100, resizable=no, scrollbars=yes, toolbar=no, menubar=no, location=no, directories=no, status=yes');
}





/*
Functions for the toggle buttons for the filter and special categories
*/
function set_toggle_button_selection(element, select) {
	var leftElement = get_first_div(element.childNodes);
	var rightElement = get_first_div(leftElement.childNodes);
	var contentElement = get_first_div(rightElement.childNodes);

	if(select) {
		leftElement.className = "toggle_button_left toggle_button_left_selected";
		rightElement.className = "toggle_button_right toggle_button_right_selected";
		contentElement.className = "toggle_button_content toggle_button_content_selected";
	}
	else {
		leftElement.className = "toggle_button_left";
		rightElement.className = "toggle_button_right";
		contentElement.className = "toggle_button_content";
	}
}

function set_toggle_button_selection2(element, select) {
	var divs = getElementsByClassName("filter_menu_selected", element.parentNode.parentNode);
	for(var i=0,j=divs.length; i<j; i++){
		divs[i].className = "toggle_button";
	}
	element.className = "filter_menu_selected";
}

function get_first_div(childNodes) {
	for (var i = 0; i < childNodes.length; i++) {
		var node = childNodes[i];
		if(node.nodeType == 1 && node.nodeName == "DIV") {
			return node;
		}
	}
	throw "DIV child not found!";
}
/*
-------------------------------------------------------------------
*/





/*
Functions for the thumbnail popup
*/
var article_mult = 2.5;//4.5;
      var original_image_sizes = new Object();
function enlarge_image(target_image, top_weight, left_weight, other_img) {
	var width = 0;
	var height = 0;
	var temp;
	temp = target_image.src;
	target_image.src = other_img.src;
	other_img.src = temp;
	if(original_image_sizes[target_image.id] == null) {
		width = target_image.width;
		height = target_image.height;
		original_image_sizes[target_image.id] = [width, height, top_weight, left_weight];
	}
	else {
		var orig_size = original_image_sizes[target_image.id];
		width = orig_size[0];
		height = orig_size[1];
		top_weight = orig_size[2];
		left_weight = orig_size[3];
	}
      	
    target_image.dir='rtl';
	now=parseInt(target_image.style.zIndex);
	for (i=now+1; i<=10; i++) {
		var mult = ((article_mult-1.0) * ( i / 10.0));
		var w = (width * (mult + 1)) + 'px';
		var h = (height* (mult + 1)) + 'px';
		
		var top = -(height* (mult * top_weight)) + 'px';
		var left = -(width * (mult * left_weight)) + 'px';
		
		if(navigator.userAgent.indexOf("Firefox") != -1 && i % 3 == 1) {
			continue;
		}

		setZoom(target_image, 'rtl', w, h, i, 20*(i-now), top, left);
	}
}
      
function reduce_image(img, other_img) {
	var width = 0;
	var height = 0;
	var left_weight = 0;
	var top_weight = 0;
	var temp;
	if(original_image_sizes[img.id] == null) {
		return;
	}
	else {
		var orig_size = original_image_sizes[img.id];
		width = orig_size[0];
		height = orig_size[1];
		top_weight = orig_size[2];
		left_weight = orig_size[3];
	}
      	
	img.dir='ltr';
	now=parseInt(img.style.zIndex);
	for (i=now-1; i>=0; i--) {
		var mult = ((article_mult-1.0) * ( i / 10.0));
		var w = (width * (mult + 1)) + 'px';
		var h = (height* (mult + 1)) + 'px';

		var top = -(height* (mult * top_weight)) + 'px';
		var left = -(width * (mult * left_weight)) + 'px';

		if(navigator.userAgent.indexOf("Firefox") != -1 && i % 3 == 1) {
			continue;
		}

		setZoom(img, 'ltr', w, h, i, 20*(now-i), top, left);
	}
	temp = img.src;
	img.src = other_img.src;
	other_img.src = temp;
}
        
function setZoom(img, dir, width, height, zIndex, delay, top, left) {
	setTimeout(function() {
  		if (img.dir==dir) {
		    img.style.width=width;
		    img.style.height=height;
		    img.style.zIndex=zIndex;
		    img.parentNode.parentNode.style.zIndex=zIndex;
		    img.parentNode.parentNode.parentNode.style.zIndex=zIndex;
		    
		    img.parentNode.parentNode.style.top = top;
		    img.parentNode.parentNode.style.left = left;
		    
		    img.parentNode.parentNode.style.width=width;
		    img.parentNode.parentNode.style.height=height;
  		}
	}, delay);
}
/*
-------------------------------------------------------------------
*/


/*
Functions for the article rollover effects
*/
var originalImageSrc = null;
function mouseOverArticle(img, larger_image) {
	if(originalImageSrc == null) {
		originalImageSrc = document.getElementById("featured_publication_img").src;
	}
	document.getElementById("featured_publication_img").setClass = "img_150_200";
	document.getElementById("featured_publication_img").src = larger_image.src;

}

function mouseOutArticle(img) {
	document.getElementById("featured_publication_img").setClass = "";
	document.getElementById("featured_publication_img").src = originalImageSrc;
	
}
/*
-------------------------------------------------------------------
*/

function getElementsByClassName(classname, node) {
	if(!node) node = document.getElementsByTagName("body")[0];
	var a = [];
	var re = new RegExp('\\b' + classname + '\\b');
	var els = node.getElementsByTagName("*");
	trace(els.length);
	for(var i=0,j=els.length; i<j; i++)
		if(re.test(els[i].className))a.push(els[i]);
	return a;
}

function unFocus(element) {

	if (element && element.blur) {
	
		try {
		
			element.blur();
		}
		catch (exception) { }
	}
}
function mainCenterPicture(){

	document.writeln('<div style="DISPLAY: block; WIDTH: 446px; POSITION: relative; HEIGHT: 212px">');
	document.writeln('<div style="DISPLAY: inline; Z-INDEX: 10; LEFT: 157px; POSITION: absolute; TOP: 87px"><a href="' + document.getElementsByName(0)[0].href + '">' + 
		'<img src="' + this['pic' + 0].src + '"></a></div>');
	document.writeln('<div style="DISPLAY: inline; Z-INDEX: 10; LEFT: 258px; POSITION: absolute; TOP: 79px"><a href="' + document.getElementsByName(1)[0].href + '">' + 
		'<img src="' + this['pic' + 1].src + '"></a></div>');
	document.writeln('<div style="DISPLAY: inline; Z-INDEX: 9; LEFT: 340px; POSITION: absolute; TOP: 51px"><a href="' + document.getElementsByName(2)[0].href + '">' + 
		'<img src="' + this['pic' + 2].src + '"></a></div>');
	document.writeln('<div style="DISPLAY: inline; Z-INDEX: 8; LEFT: 295px; POSITION: absolute; TOP: 19px"><a href="' + document.getElementsByName(3)[0].href + '">' + 
		'<img src="' + this['pic' + 3].src + '"></a></div>');
	document.writeln('<div style="DISPLAY: inline; Z-INDEX: 7; LEFT: 201px; POSITION: absolute; TOP: 0px"><a href="' + document.getElementsByName(4)[0].href + '">' + 
		'<img src="' + this['pic' + 4].src + '"></a></div>');
	document.writeln('<div style="DISPLAY: inline; Z-INDEX: 7; LEFT: 101px; POSITION: absolute; TOP: 7px"><a href="' + document.getElementsByName(5)[0].href + '">' + 
		'<img src="' + this['pic' + 5].src + '"></a></div>');
	document.writeln('<div style="DISPLAY: inline; Z-INDEX: 8; LEFT: 10px; POSITION: absolute; TOP: 38px"><a href="' + document.getElementsByName(6)[0].href + '">' + 
		'<img src="' + this['pic' + 6].src +'"></a></div>');
	document.writeln('<div style="DISPLAY: inline; Z-INDEX: 9; LEFT: 72px; POSITION: absolute; TOP: 67px"><a href="' + document.getElementsByName(7)[0].href + '">' + 
		'<img src="' + this['pic' + 7].src + '"></a></div>');
	document.writeln('</div>');
}

function updateBreadCrumb(inner){
    var navString = document.getElementById("breadcrumb");
    if (navString != null) navString.innerHTML = inner;
}

function Map()
{
    // members
    this.keyArray = new Array(); // Keys
    this.valArray = new Array(); // Values

    // methods
    this.put = put;
    this.get = get;
    this.size = size;
    this.clear = clear;
    this.keySet = keySet;
    this.valSet = valSet;
    this.showMe = showMe;   // returns a string with all keys and values in map.
    this.findIt = findIt;
    this.remove = remove;
}

function put( key, val )
{
    var elementIndex = this.findIt( key );

    if( elementIndex == (-1) )
    {
        this.keyArray.push( key );
        this.valArray.push( val );
    }
    else
    {
        this.valArray[ elementIndex ] = val;
    }
}

function get( key )
{
    var result = null;
    var elementIndex = this.findIt( key );

    if( elementIndex != (-1) )
    {
        result = this.valArray[ elementIndex ];
    }

    return result;
}

function remove( key )
{
    var result = null;
    var elementIndex = this.findIt( key );

    if( elementIndex != (-1) )
    {
        this.keyArray = this.keyArray.removeAt(elementIndex);
        this.valArray = this.valArray.removeAt(elementIndex);
    }

    return ;
}

function size()
{
    return (this.keyArray.length);
}

function clear()
{
    for( var i = 0; i < this.keyArray.length; i++ )
    {
        this.keyArray.pop(); this.valArray.pop();
    }
}

function keySet()
{
    return (this.keyArray);
}

function valSet()
{
    return (this.valArray);
}

function showMe()
{
    var result = "";

    for( var i = 0; i < this.keyArray.length; i++ )
    {
        result += "Key: " + this.keyArray[ i ] + "\tValues: " + this.valArray[ i ] + "\n";
    }
    return result;
}

function findIt( key )
{
    var result = (-1);

    for( var i = 0; i < this.keyArray.length; i++ )
    {
        if( this.keyArray[ i ] == key )
        {
            result = i;
            break;
        }
    }
    return result;
}

function removeAt( index )
{
  var part1 = this.slice( 0, index);
  var part2 = this.slice( index+1 );

  return( part1.concat( part2 ) );
}
Array.prototype.removeAt = removeAt;

function imageClick(issueId, backParam, ld){
    var myForm = document.toPublicationView;
    /*if (myForm.backParam)
        myForm.backParam.value = backParam;*/
    myForm.issueId.value = issueId;
    if (document.location.hash){
        myForm.browse.value = document.location.hash.substring(1);
    }
    myForm.submit();
}

//IssuelistTagLib's javascript
function RSHIssueListPagerClicked(page, currentid, issuesPanelUrl){
    dhtmlHistory.add(page + "_" + currentid, {page: page, id:currentid, url:issuesPanelUrl});
    var paramObject = new Object();
    paramObject.id = currentid;
    paramObject.url = issuesPanelUrl;
    paramObject.page = page;
    dhtmlHistory.add(page + "_" + currentid, paramObject);
    onIssueListPagerClicked(page, currentid, issuesPanelUrl);
}

function onIssueListPagerClicked(page, currentid, issuesPanelUrl){

    new Ajax.Request(issuesPanelUrl + currentid, {
        method: 'get',
        evalScripts:false,
        parameters:{p:page},
        encoding:'utf-8',
        onSuccess: function(transport) {
            try {
                if(transport.responseJSON == null) {
                    if(transport.readyState == "Complete") {
                        document.getElementById("issues_panel").innerHTML = "Error in server response; JSON data expected";
                    }
                    else {
                        document.getElementById("issues_panel").innerHTML = "";
                    }
                }
                else {
                    if(transport.responseJSON.breadcrumb != null && document.getElementById("breadcrumb") != null) {
                        document.getElementById("breadcrumb").innerHTML = transport.responseJSON.breadcrumb;
                    }
                    if (document.getElementById("issues_panel")!= null){
                        document.getElementById("issues_panel").innerHTML = transport.responseJSON.contentData;
                    }

                }
            }catch(error) {
                alert(error);
            }
        },
        onException: function(transport, exception) {
            try {
                document.getElementById("issues_panel").innerHTML = "Error (onException): " + exception;
            }catch(error) {
                alert(error);
            }
        },
        onFailure: function(transport) {
            try {
                document.getElementById("issues_panel").innerHTML = "Error (onFaliure): " + transport.status + ": " + transport.statusText;
            }catch(error) {
                alert(error);
            }
        }
    });

}

function setAlphabet(id){
    new Ajax.Updater('alphabet', pageContext + '/breadcrumb/setAlphabet/' + id,{asynchronous:true,evalScripts:true});
}

//facebook related
function facebookLogin(referer) {
    if (referer == "" || referer == undefined || referer == null){
        referer = window.location.href;
    }
    FB.getLoginStatus(function(response) {
        if (response.authResponse) {
            // logged in and connected user, someone you know
            window.location.href = pageContext + "/login/facebook_login?referer=" + encodeURI(referer) + "&uid=" + response.authResponse.userID + "&accessToken=" + response.authResponse.accessToken;
        }
    });
}

function createWindow(url, wWidth, wHeight) {
    var viewport = document.viewport.getDimensions();
    var x = Math.ceil((viewport.width / 2) - (wWidth / 2));
    var y = Math.ceil((viewport.height / 2) - (wHeight / 2));
    window.open(url, 'popupWindow', 'width=' + wWidth + ', height=' + wHeight + ', left=' + x + ', top=' + y + ', screenX=' + x + ', screenY=' + y + ', toolbar=no, location=no, directories=no, status=no, menubar=no, scrollbars=no, copyhistory=no, resizable=yes');
}

