www.gusucode.com > SiteEngine(建站引擎) 7.0 个人免费版源码程序 > data/js/panel.js

    /************************************************************************************************************
(C) www.dhtmlgoodies.com, October 2005

This is a script from www.dhtmlgoodies.com. You will find this and a lot of other scripts at our website.

Terms of use:
You are free to use this script as long as the copyright message is kept intact. However, you may not
redistribute, sell or repost it without our permission.

Updated:

February, 22nd 2006 - Instead of skipping onclick events when slide is in progress, start sliding in the other direction if mouse is clicked the second time.
April, 	23rd 2006 - Added support for having only one pane expanded simultaneously( xpPanel_onlyOneExpandedPane)
Thank you!

www.dhtmlgoodies.com
Alf Magne Kalleland

************************************************************************************************************/

/* Update LOG

January, 28th - Fixed problem when double clicking on a pane(i.e. expanding and collapsing).

*/
var xpPanel_slideActive = true;	// Slide down/up active?
var xpPanel_slideSpeed = 20;	// Speed of slide
var xpPanel_onlyOneExpandedPane = false;	// Only one pane expanded at a time ?

var dhtmlgoodies_xpPane;
var dhtmlgoodies_paneIndex;

var savedActivePane = false;
var savedActiveSub = false;

var xpPanel_currentDirection = new Array();

var cookieNames = new Array();


var currentlyExpandedPane = false;

/*
These cookie functions are downloaded from
http://www.mach5.com/support/analyzer/manual/html/General/CookiesJavaScript.htm
*/
function Get_Cookie(name) {
   var start = document.cookie.indexOf(name+"=");
   var len = start+name.length+1;
   if ((!start) && (name != document.cookie.substring(0,name.length))) return null;
   if (start == -1) return null;
   var end = document.cookie.indexOf(";",len);
   if (end == -1) end = document.cookie.length;
   return unescape(document.cookie.substring(len,end));
}
// This function has been slightly modified
function Set_Cookie(name,value,expires,path,domain,secure) {
	expires = expires * 60*60*24*1000;
	var today = new Date();
	var expires_date = new Date( today.getTime() + (expires) );
    var cookieString = name + "=" +escape(value) +
       ( (expires) ? ";expires=" + expires_date.toGMTString() : "") +
       ( (path) ? ";path=" + path : "") +
       ( (domain) ? ";domain=" + domain : "") +
       ( (secure) ? ";secure" : "");
    document.cookie = cookieString;
}

function cancelXpWidgetEvent()
{
	return false;

}

function showHidePaneContent(e,inputObj)
{
	if(!inputObj)inputObj = this;

	var img = inputObj.getElementsByTagName('IMG')[0];
	var numericId = img.id.replace(/[^0-9]/g,'');
	var obj = document.getElementById('paneContent' + numericId);
	if(img.src.toLowerCase().indexOf('up')>=0){
		currentlyExpandedPane = false;
		img.src = img.src.replace('up','down');
		if(xpPanel_slideActive){
			obj.style.display='block';
			xpPanel_currentDirection[obj.id] = (xpPanel_slideSpeed*-1);
			slidePane((xpPanel_slideSpeed*-1), obj.id);
		}else{
			obj.style.display='none';
		}
		if(cookieNames[numericId])Set_Cookie(cookieNames[numericId],'0',100000);
	}else{
		if(this){
			if(currentlyExpandedPane && xpPanel_onlyOneExpandedPane)showHidePaneContent(false,currentlyExpandedPane);
			currentlyExpandedPane = this;
		}else{
			currentlyExpandedPane = false;
		}
		img.src = img.src.replace('down','up');
		if(xpPanel_slideActive){
			if(document.all){
				obj.style.display='block';
				//obj.style.height = '1px';
			}
			xpPanel_currentDirection[obj.id] = xpPanel_slideSpeed;
			slidePane(xpPanel_slideSpeed,obj.id);
		}else{
			obj.style.display='block';
			subDiv = obj.getElementsByTagName('DIV')[0];
			obj.style.height = subDiv.offsetHeight + 'px';
		}
		if(cookieNames[numericId])Set_Cookie(cookieNames[numericId],'1',100000);
	}
	return true;
}



function slidePane(slideValue,id)
{
	if(slideValue!=xpPanel_currentDirection[id]){
		return false;
	}
	var activePane = document.getElementById(id);
	if(activePane==savedActivePane){
		var subDiv = savedActiveSub;
	}else{
		var subDiv = activePane.getElementsByTagName('DIV')[0];
	}
	savedActivePane = activePane;
	savedActiveSub = subDiv;

	var height = activePane.offsetHeight;
	var innerHeight = subDiv.offsetHeight;
	height+=slideValue;
	if(height<0)height=0;
	if(height>innerHeight)height = innerHeight;

	if(document.all){
		activePane.style.filter = 'alpha(opacity=' + Math.round((height / subDiv.offsetHeight)*100) + ')';
	}else{
		var opacity = (height / subDiv.offsetHeight);
		if(opacity==0)opacity=0.01;
		if(opacity==1)opacity = 0.99;
		activePane.style.opacity = opacity;
	}


	if(slideValue<0){
		activePane.style.height = height + 'px';
		subDiv.style.top = height - subDiv.offsetHeight + 'px';
		if(height>0){
			setTimeout('slidePane(' + slideValue + ',"' + id + '")',10);
		}else{
			if(document.all)activePane.style.display='none';
		}
	}else{
		subDiv.style.top = height - subDiv.offsetHeight + 'px';
		activePane.style.height = height + 'px';
		if(height<innerHeight){
			setTimeout('slidePane(' + slideValue + ',"' + id + '")',10);
		}
	}




}

function mouseoverTopbar()
{
	var img = this.getElementsByTagName('IMG')[0];
	var src = img.src;
	img.src = img.src.replace('.gif','_over.gif');

	var span = this.getElementsByTagName('SPAN')[0];
	span.style.color='#428EFF';

}
function mouseoutTopbar()
{
	var img = this.getElementsByTagName('IMG')[0];
	var src = img.src;
	img.src = img.src.replace('_over.gif','.gif');

	var span = this.getElementsByTagName('SPAN')[0];
	span.style.color='';



}


function initDhtmlgoodies_xpPane(panelTitles,panelDisplayed,cookieArray)
{
	dhtmlgoodies_xpPane = document.getElementById('dhtmlgoodies_xpPane');
	var divs = dhtmlgoodies_xpPane.getElementsByTagName('DIV');
	dhtmlgoodies_paneIndex=0;
	cookieNames = cookieArray;
	for(var no=0;no<divs.length;no++){
		if(divs[no].className=='dhtmlgoodies_panel'){

			var outerContentDiv = document.createElement('DIV');
			var contentDiv = divs[no].getElementsByTagName('DIV')[0];
			outerContentDiv.appendChild(contentDiv);

			outerContentDiv.id = 'paneContent' + dhtmlgoodies_paneIndex;
			outerContentDiv.className = 'panelContent';
			var topBar = document.createElement('DIV');
			topBar.onselectstart = cancelXpWidgetEvent;
			var span = document.createElement('SPAN');
			span.innerHTML = panelTitles[dhtmlgoodies_paneIndex];
			topBar.appendChild(span);
			topBar.onclick = showHidePaneContent;
			if(document.all)topBar.ondblclick = showHidePaneContent;
			topBar.onmouseover = mouseoverTopbar;
			topBar.onmouseout = mouseoutTopbar;
			topBar.style.position = 'relative';

			var img = document.createElement('IMG');
			img.id = 'showHideButton' + dhtmlgoodies_paneIndex;
			img.src = 'images/arrow_up.gif';
			topBar.appendChild(img);

			if(cookieArray[dhtmlgoodies_paneIndex]){
				cookieValue = Get_Cookie(cookieArray[dhtmlgoodies_paneIndex]);
				if(cookieValue)panelDisplayed[dhtmlgoodies_paneIndex] = cookieValue==1?true:false;

			}

			if(!panelDisplayed[dhtmlgoodies_paneIndex]){
				outerContentDiv.style.height = '0px';
				contentDiv.style.top = 0 - contentDiv.offsetHeight + 'px';
				if(document.all)outerContentDiv.style.display='none';
				img.src = 'images/arrow_down.gif';
			}

			topBar.className='topBar';
			divs[no].appendChild(topBar);
			divs[no].appendChild(outerContentDiv);
			dhtmlgoodies_paneIndex++;
		}
	}
}

function panel(objname) {
	obj = findobj(objname);
	img = findobj(objname+"_img");
	collapsed = getcookie("siteengine_panel");
	cookie_start = collapsed ? collapsed.indexOf(objname) : -1;
	cookie_end = cookie_start + objname.length + 1;

	if(obj.style.display == "none") {
		obj.style.display = "";
		img_re = new RegExp("_yes\\.gif$");
		img.src = img.src.replace(img_re, '_no.gif');
		if(cookie_start != -1) collapsed = collapsed.substring(0, cookie_start) + collapsed.substring(cookie_end, collapsed.length);
	} else {
		obj.style.display = "none";
		img_re = new RegExp("_no\\.gif$");
		img.src = img.src.replace(img_re, '_yes.gif');
		if(cookie_start == -1) collapsed = collapsed + objname + " ";
	}

	expires = new Date();
	expires.setTime(expires.getTime() + (collapsed ? 86400 * 30 : -(86400 * 30 * 1000)));
	document.cookie = "siteengine_panel=" + escape(collapsed) + "; expires=" + expires.toGMTString() + "; path=/";
}

function imgzoom(o) {
	if(event.ctrlKey) {
		var zoom = parseInt(o.style.zoom, 10) || 100;
		zoom -= event.wheelDelta / 12;
		if(zoom > 0) {
			o.style.zoom = zoom + '%';
		}
		return false;
	} else {
		return true;
	}
}