//layout.js

/* navigation */
//activeSection = current section, area, category, tag, entry_type.
var activeSection = Array('main', 'vlog', false, '', '0');
var PARAM_INDEX_SECTION = 0;
var PARAM_INDEX_AREA = 1;
var PARAM_INDEX_CATEGORY = 2;
var PARAM_INDEX_TAG = 3;
var PARAM_INDEX_ENTRY_TYPE = 4;
var selectedMember = ''; // GLOBAL VARIABLE TO HANDLE SELECTED MEMBER!

var hasWelcome = false;
var tmpHTML = '';
var playerStatusEnded = true;

function initLayout(){
	activeSection[PARAM_INDEX_SECTION] = 'main';
	activeSection[PARAM_INDEX_TAG] = '';
	activeSection[PARAM_INDEX_CATEGORY] = 'CONTENT';
	activeSection[PARAM_INDEX_ENTRY_TYPE] = 0;

	showMainMenu();

	//the last function is defined in com/square/presentation/showcontent.js :
	updateMenus();
	showContent();
}


function showMainMenu() {
	var service = null;
	var connector = new AjaxConnector();

	// Main Tab menu loading service
	//service = new Service("A0-005", oEnviroment.getServicePath() + oEnviroment.getServletName(), "");
	//service.setMethod('GET');
	//service.addParameter("language", oEnviroment.getLanguage().getID());
	//service = connector.syncRun(service);

	try {
		var so = new SWFObject("rsrc/mainmenu.swf", "mainMenuSWF", "640", "38", "8", "#000000");
		so.addParam("wmode", "opaque"); so.addParam("salign", "tl");
		//menuitems: paired array of displayed_name, tab code for setMenuTab(menu,tab) <- menu will be "mainmenu"

//		var items = "";
//		if (service !==null) {
//			if (!service.getResult().hasErrors()) {
//				while (service.getResult().hasNext()) {
//					var serviceRow = service.getResult().getCurrentRow().split("|!|");
//					if (items.length) { items += ','; }
//					items += serviceRow[3] + ',' + serviceRow[1];
//					service.getResult().moveNext();
//				}
//			}
//		}

        var items = "SQUA.RE TV,main,HIGH LIVING,highliving,NIGHTLIFE,nightlife,STYLE,style,ESCAPE,escape,MY SQUA.RE,mysquare";

        so.addVariable("menuitems", items);
		so.addVariable("currentmenu",(activeSection[PARAM_INDEX_SECTION]).toLowerCase());
		so.write("mainMenuSWF_holder");
	} catch (e) {

	}
}

/**********************************************************************
 *  Flash tab menu click handler
 *	@param menulevel: level index of clicked menu item, according to activeSection array
 *	@param tab: codename of the clicked item, to be placed in activeSection[menu]
 **********************************************************************/
function setMenuTab(menulevel,tab, tabx){

	var tabx = tabx ? Number(tabx) : false; //v131

	menulevel = Number( menulevel );
	activeSection[menulevel] = tab;	//set up variable tracking of active section:

	//reset sub-levels:
	for(var i = menulevel+1; i<=2; i++)	{
		activeSection[i] = false;
	}

	// Here we split flash Main menu calls into specific events to clear the code
	// See 	Package:com.square.presentation
	// 		File: events.js
	if (menulevel == 0) {
		switch (activeSection[PARAM_INDEX_SECTION]) {
		    case 'directory':
				menu_directory_click(tab, tabx);
				break;
			case 'editorial':
				menu_editorial_click(tab, tabx);
				break;
			case 'members':
				menu_members_click(tab, tabx);
				break;
			case 'mysquare':
				menu_mysquare_click(tab, tabx);
				break;
			case 'main':
				menu_main_click(tab, tabx);
				break;
			case 'people':
				menu_people_click(tab, tabx);
				break;
			case 'highliving':
				menu_highliving_click(tab, tabx);
				break;
			case 'nightlife':
				menu_nightlife_click(tab, tabx);
				break;
			case 'style':
				menu_style_click(tab, tabx);
				break;
			case 'escape':
				menu_escape_click(tab, tabx);
				break;
			case 'travel':
				menu_travel_click(tab, tabx);
				break;
		}

	} else if (menulevel == 1) {
		switch (activeSection[PARAM_INDEX_AREA]) {
			case 'vlog':
				submenu_channel_click(tab);
				break;
			case 'mostpopular':
				submenu_mostpopular_click(tab);
				break;
			case 'members':
				submenu_members_click(tab);
				break;
			case 'events':
				submenu_events_click(tab);
				break;
			case 'comments':
				submenu_comments_click(tab);
				break;
			case 'messages':
				submenu_messages_click(tab);
				break;
		}
	} else if (menulevel == 2) {
		switch (activeSection[PARAM_INDEX_CATEGORY]) {
			case 'content':
				if (oStrategy.getCurrentPage() == 'mySquare.php') {
					var reorder = $('img_reorder');
					if (reorder) reorder.style.display = '';
				}
				filter_content_click(tab);
				break;
			case 'members':
				filter_members_click(tab);
				break;
			case 'events':
				filter_events_click(tab);
				break;
			case 'contacts':
				filter_contacts_click(tab);
				break;
			case 'requests':
				filter_requests_click(tab);
				break;
			case 'myuploads':
				if (oStrategy.getCurrentPage() == 'mySquare.php') {
					var reorder = $('img_reorder');
					if (reorder) reorder.style.display = 'none';
				}
				filter_uploads_click(tab);
				break;
			case 'added':
				if (oStrategy.getCurrentPage() == 'mySquare.php') {
					var reorder = $('img_reorder');
					if (reorder) reorder.style.display = 'none';
				}
				filter_added_click(tab);
				break;
		}
	}
}

function toggleMemberSub(){ //v130
	if( $('mainmenu_submenu-members').visible() ){ //if submenu is displayed..

		$('mainmenu_submenu-members').hide();//hide it,
		showMainTab( activeSection[0] );//restore previous active menu tab

	}else{ //submenu is not visible, should populate it with options? or this would be handled before?

		//some things to do first?
		//...

		//inject HTML:
		//...
		//$("mainmenu_submenu-members").innerHTML = '<h3>JaquiStar2007<\/h3><h5>Recently Visited:<\/h5><ul><li><a href="#" onclick="return showMember(1);">User 1<\/a><\/li><li><a href="#" onclick="return showMember(2);">User 2<\/a><\/li><li><a href="#" onclick="return showMember(3);">User 3<\/a><\/li><li><a href="#" onclick="return showMember(4);">User 4<\/a><\/li><\/ul>';

		//show menu:
		$('mainmenu_submenu-members').show();
	}

}


function updateMenus( menulevel, hasMember ){
	var menulevel = menulevel ? menulevel : PARAM_INDEX_SECTION;
	if (!hasMember) hasMember = false;

	//process defaults:
	if( !activeSection[PARAM_INDEX_AREA] ){
		activeSection[PARAM_INDEX_AREA] = "vlog";
	}else if( activeSection[PARAM_INDEX_AREA]=="mostpopular" && !activeSection[PARAM_INDEX_CATEGORY] ){
		activeSection[PARAM_INDEX_CATEGORY] = "content";
	}

	var h1 = ""; var h2 = "";


	/*********************************************************
	 * A partir de aca hay un problema con la generacion del
	 * html en IE. Esto hace que se produzca un refresh
	 *********************************************************/
	//get options for last menu level ( array level 2 )
	switch (activeSection[PARAM_INDEX_AREA]){
		case "vlog":
			var reorder = '';
			if (oStrategy.getCurrentPage() == 'index.php') {
				h1 = ''; //'<strong>Channel embed<\/strong> <input type="text" class="code" value="<object width=425 height=350><param></param></object>" onclick="this.select();">';
				h2 = '<a href="#" onclick="return scrollHome(this,0);">TOP<\/a> | <a href="#" onclick="return scrollToNow(this,1);">NOW PLAYING<\/a>';
				//drawGridFilterCombo(activeSection[PARAM_INDEX_AREA], activeSection[PARAM_INDEX_CATEGORY]);
				$('frmPaginationContainer').style.display = '';
			} else {
				h2 = '<a href="#" onclick="return scrollHome(this,0);">TOP<\/a>';
				if (activeSection[PARAM_INDEX_CATEGORY] == 'content') {
					reorder = '<a href="javascript:reorder_save();"><img src="localized/en/button_reorder_save.gif" /></a>'
					h2 += '&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Drag and drop your entries to arrange your channel';
				}

				h1= '<table class="layout" cellspacing="0" width="100%"><tr><td>' +
	                	'<h5>' +
							'<a href="#" ' + (activeSection[PARAM_INDEX_CATEGORY]=="content" ? ' class="here" ' : '') + ' onclick="return setSidefootTab(\'content\');">CHANNEL</a>' +
							' | ' +
							'<a href="#" ' + (activeSection[PARAM_INDEX_CATEGORY]=="myuploads" ? ' class="here" ' : '') + ' onclick="return setSidefootTab(\'myuploads\');">UPLOADS</a>' +
							' | ' +
							'<a href="#" ' + (activeSection[PARAM_INDEX_CATEGORY]=="added" ? ' class="here" ' : '') + ' onclick="return setSidefootTab(\'added\');">ADDED CONTENT</a>' +
	                	'</td><td align="right">' +
						reorder +
						'</td>' +
						'</tr>' +
                  	'</table>';

				drawGridFilterCombo(activeSection[PARAM_INDEX_AREA], activeSection[PARAM_INDEX_CATEGORY]);
				$('frmPaginationContainer').style.display = 'none';
			}
			$('gridOptionsContainer').innerHTML = h2;
			$('frmCommentButton').style.display = 'none';
			$('frmFilterCombo').style.display = 'none';
			break;

		case "mostpopular" :
			h1 = '<h5>';
			h1 += '<a href="#" ' + (activeSection[PARAM_INDEX_CATEGORY]=="content" ? ' class="here" ' : '') + ' onclick="return setSidefootTab(\'content\');">CONTENT</a>';
			h1 += ' | ';
			h1 += '<a href="#" ' + (activeSection[PARAM_INDEX_CATEGORY]=="members" ? ' class="here" ' : '') + ' onclick="return setSidefootTab(\'members\');">NETWORK</a>';
			/**
			h1 += ' | ';
			h1 += '<a href="#" ' + (activeSection[PARAM_INDEX_CATEGORY]=="events" ? ' class="here" ' : '') + ' onclick="return setSidefootTab(\'events\');">EVENTS</a>';
			*/
			h1 += '</h5>';
			h1 = '';
			if (activeSection[PARAM_INDEX_CATEGORY]=="content") {
				h2 = '<a href="#" onclick="return scrollHome(this,0);">TOP<\/a> | <a href="#" onclick="return scrollHome(this,1);">NOW PLAYING<\/a>';
			} else {
				h2 ='<a href="#" onclick="return scrollHome(this,0);">TOP<\/a> '; // | <a href="#" onclick="return scrollHome(this,1);">BOTTOM<\/a>';
			}

			$('frmFilterCombo').style.display = '';
			$('gridOptionsContainer').innerHTML = h2;
			$('frmCommentButton').style.display = 'none';
			drawGridFilterCombo(activeSection[PARAM_INDEX_AREA], activeSection[PARAM_INDEX_CATEGORY]);
			break;

		case "events" :
			h1 = '';
			h2 ='<a href="#" onclick="return scrollHome(this,0);">TOP<\/a> '; // | <a href="#" onclick="return scrollHome(this,1);">BOTTOM<\/a>'
			if (oStrategy.getCurrentPage() == 'mySquare.php') {
				$('frmPaginationContainer').style.display = 'none';
				h1 = '<p align="right"><a href="javascript:edit_event(\'\');"><img class="button" src="localized/en/button_ixmfoot_createevent.gif" height="20" width="96"></a></p>';
			}
			$('frmFilterCombo').style.display = 'none';
			$('gridOptionsContainer').innerHTML = h2;
			$('frmCommentButton').style.display = 'none';
			break;

		case "comments" :
			h1 = '';
			h2 = '';
			$('frmFilterCombo').style.display = 'none';
			if (oEnviroment.isUserLogged()) {

				if (oStrategy.getCurrentPage() != 'mySquare.php') {
					$('frmCommentButton').style.display = '';
					var paginator = $('frmPaginationContainer');
					if (paginator)	paginator.style.display = '';
				} else {
					var paginator = $('frmPaginationContainer');
					if (paginator)	paginator.style.display = '';
				}

			}
			h2 +='<a href="#" onclick="return scrollHome(this,0);">TOP<\/a> '; // | <a href="#" onclick="return scrollHome(this,1);">BOTTOM<\/a>'
			$('gridOptionsContainer').innerHTML = h2;

			break;
		case "members" :
			h1 = '';
			if (oStrategy.getCurrentPage() == 'index.php') {
				h2 ='<a href="#" onclick="return scrollHome(this,0);">TOP<\/a> '; // | <a href="#" onclick="return scrollHome(this,1);">BOTTOM<\/a>'
			} else {
				if (activeSection[PARAM_INDEX_CATEGORY]!="contacts" && activeSection[PARAM_INDEX_CATEGORY]!="requests") {
					activeSection[PARAM_INDEX_CATEGORY]="contacts";
				}
				h1= '<table class="layout" cellspacing="0" width="100%"><tr><td>' +
	                	'<h5><a href="#" ' + (activeSection[PARAM_INDEX_CATEGORY]=="contacts" ? ' class="here" ' : '') + ' onclick="return setSidefootTab(\'contacts\');">CONTACTS</a> &nbsp; '+
						'<a href="#" ' + (activeSection[PARAM_INDEX_CATEGORY]=="requests" ? ' class="here" ' : '') + ' onclick="return setSidefootTab(\'requests\');">PENDING REQUESTS</a></h5>' +
	                	'</td><td align="right"><a href="javascript:invite_click()">' +
                  			'<img class="button" src="localized/en/button_ixmfoot_invite.gif" width="236" height="20">' +
                  		'</a></td></tr>' +
                  	'</table>';

				h2 +='<a href="#" onclick="return scrollHome(this,0);">TOP<\/a> '; // | <a href="#" onclick="return scrollHome(this,1);">BOTTOM<\/a>'

			}
			$('frmPaginationContainer').style.display = 'block';
			$('frmFilterCombo').style.display = 'none';
			$('frmCommentButton').style.display = 'none';
			$('gridOptionsContainer').innerHTML = h2;

			break;
		case "messages":
			h1 = '';
			h2 = '';
			$('frmPaginationContainer').style.display = 'none';
			$('frmFilterCombo').style.display = 'none';
			$('frmCommentButton').style.display = 'none';
			$('gridOptionsContainer').innerHTML = h2;
			$('embedCode_div').style.display = 'none';
			break
		default:
			h1 = '';
			h2 ='<a href="#" onclick="return scrollHome(this,0);">TOP<\/a> '; // | <a href="#" onclick="return scrollHome(this,1);">BOTTOM<\/a>'
			$('frmFilterCombo').style.display = 'none';
			$('frmCommentButton').style.display = 'none';
			$('gridOptionsContainer').innerHTML = h2;
			$('embedCode_div').style.display = 'none';
			break;

	}//end switch

	/*********************************************************
	 * Hasta aca hay un problema con la generacion del
	 * html en IE. Esto hace que se produzca un refresh
	 *********************************************************/

	//update flash tab?
	if(menulevel == PARAM_INDEX_SECTION) {
		if (oStrategy.getCurrentPage() == 'mySquare.php') {
			showMySquareTab(activeSection[PARAM_INDEX_AREA]);
		} else {
			showIxTab(activeSection[PARAM_INDEX_AREA], hasMember);
		}
	}

	//update HTML subtabs?
	//	if(menulevel!=2){
		$('side_menuFoot_menu').innerHTML = h1;
	//	}
}

function drawGridFilterCombo(activeArea, activeCategory) {

	switch (activeArea){
		case "vlog":
			var cbo = new Dropdown('gridFilter', '0');
			cbo.setOnChange('content_change');
			cbo.loadFromTableSync('XvLogContentFilter');

			/**
			var service = new Service("B0-005", oEnviroment.getServicePath() + oEnviroment.getServletName(), oEnviroment.getUser().getSID());
			service.setMethod('POST');
			service.addParameter('language', oEnviroment.getLanguage().getID());
			service.addParameter('section', activeSection[PARAM_INDEX_SECTION]);
			service.addParameter('area', activeArea);
			service.addParameter('user', selectedMember);

			var cbo = new Dropdown('gridFilter', '');
			cbo.setOnChange('tags_change');
			cbo.loadFromServiceSync(service);
			*/
			break;
		case "mostpopular" :

			switch (activeCategory) {
				case "content":
					var cbo = new Dropdown('gridFilter', '0');
					cbo.setOnChange('content_change');
					cbo.loadFromTableSync('XvLogContentFilter');
					break;

				case "members":
					var cbo = new Dropdown('gridFilter', '0');
					cbo.setOnChange('members_change');
					cbo.loadFromTableSync('XSquareProfileTypes');
					break;

				case "events":
					var cbo = new Dropdown('gridFilter', '0');
					cbo.setOnChange('events_change');
					cbo.loadFromTableSync('XEventClassType');
					break;
			}

			break;
	}
}

function showIxTab(currentmenu, hasMember){
	var currentmenu = currentmenu ? currentmenu : "vlog" ;
	var so = new SWFObject("rsrc/ixmenu.swf", "ixMenuSWF", "100%", "38", "8", "#000000");
	so.addParam("wmode", "opaque"); so.addParam("salign", "tl");
	so.addParam("allowscriptaccess", "always");

	//menuitems: paired array of displayed_name, tab code for setMenuTab(menu,tab) <- menu will be "ixmenu"
	if (!hasMember) {
		if (!oStrategy.getCurrentPage() == 'index.php') {
			so.addVariable( "menuitems", "NOW PLAYING,vlog,MOST POPULAR,mostpopular,NETWORK,members");
		} else {
			if (activeSection[PARAM_INDEX_SECTION] == 'main') {
				so.addVariable( "menuitems", "NOW PLAYING,vlog,LATEST UPLOADS,mostpopular,NEW MEMBERS,members");
			}  else {
				so.addVariable( "menuitems", "NOW PLAYING,vlog,TOP CONTENT,mostpopular,FEATURED MEMBERS,members");
			}
		}
	} else {
		so.addVariable( "menuitems", "NOW PLAYING,vlog,COMMENTS,comments,NETWORK,members");
	}
	so.addVariable( "currentmenu", currentmenu );

	so.write("ixMenuSWF_holder");
}

function showMySquareTab(currentmenu){
	var currentmenu = currentmenu ? currentmenu : "channel" ;

	var so = new SWFObject("rsrc/ixmenu.swf", "ixMenuSWF", "100%", "38", "8", "#000000");
	so.addParam("wmode", "opaque"); so.addParam("salign", "tl");
	so.addParam("allowscriptaccess", "always");

	so.addVariable( "menuitems", "CONTENT,vlog," +
								 "COMMENTS,comments," +
								 "NETWORK,members");
								  // Not scheduled to this phase
								 //"MESSAGES,messages");

								 // Not scheduled to this phase
								 //"EVENTS,events"


	so.addVariable( "currentmenu", currentmenu );
	so.write("ixMenuSWF_holder");
}

function showSearchResultTab(description, criteria){

	$('ixMenuSWF_holder').innerHTML = '';
	$('frmFilterCombo').style.display = 'none';
	$('frmCommentButton').style.display = 'none';

	$('side_menuFoot_menu').innerHTML = 'RESULTS <b>' + description + ' for: ' + criteria + '</b>';
	$('gridOptionsContainer').innerHTML = '<a href="#" onclick="return scrollHome(this,0);">TOP<\/a> '; // | <a href="#" onclick="return scrollHome(this,1);">BOTTOM<\/a>'
}

function setSidefootTab(tab){
	setMenuTab(PARAM_INDEX_CATEGORY,tab); return false;
} //shortcut for last menu level in HTML





function hatchVideo(what,videoID){

	var li = resolveCSSpath(what,"<LI");
	var ul = resolveCSSpath(what,"<UL");
	var imgButton = resolveCSSpath(li,".dctrl .item_status .hatcher");

	logString("LI (playNextMedia): " + li.id);
	if( ul.lastHatched == li){
		//hatch(imgButton,1) // close info
		return false;

	}else{
		//remove last "now playing"
		if ( ul.lastHatched ){
			var lastEM = resolveCSSpath( ul.lastHatched, ".dbody H4 EM");
			if( lastEM ){ lastEM.parentNode.removeChild( lastEM ); }
		}

		hatch(imgButton,2);

		//apply "now playing"
		var liH4 = resolveCSSpath(li,".dbody H4");

		var emNow = document.createElement('em');
		var emText = document.createTextNode(' Now playing');
		emNow.appendChild( emText );

		liH4.appendChild( emNow );

		//comment out this one to avoit automatic scrolling to activated item:
		scrollToNow( liH4 );

		return showVideo(videoID);
	}
}

function hatchSlideshow(what,slideID){
	var li = resolveCSSpath(what,"<LI");
	var ul = resolveCSSpath(what,"<UL");
	var imgButton = resolveCSSpath(li,".dctrl .item_status .hatcher");

	if( ul.lastHatched == li){
		// hatch(imgButton,1) // close info
		return false;

	}else{
		//remove last "now playing"
		if ( ul.lastHatched ){
			var lastEM = resolveCSSpath( ul.lastHatched, ".dbody H4 EM");
			if( lastEM ){ lastEM.parentNode.removeChild( lastEM ); }
		}

		hatch(imgButton,2);

		//apply "now playing"
		var liH4 = resolveCSSpath(li,".dbody H4");

		var emNow = document.createElement('em');
		var emText = document.createTextNode(' Now playing');
		emNow.appendChild( emText );


		liH4.appendChild( emNow );

		//comment out this one to avoit automatic scrolling to activated item:
		scrollToNow( liH4 );

		return showSlideshow(slideID);
	}
}



/*	SELECT replacement functions
	based on concepts explained in
	http://www.easy-designs.net/articles/replaceSelect/
*/
function selectMe(obj){
	obj.focus();
	var ul = resolveCSSpath(obj,"<UL");
	//var ul = obj.parentNode
	if(HasClass(obj,'selected') && !HasClass(ul,'selectOpen') ){
		AddClass(ul, 'selectOpen');
		return false;
		}

 	var lis = ul.getElementsByTagName('li');

	for (var i=0; i<lis.length; i++) {
		if (lis[i] != obj) {
	  		KillClass(lis[i],"selected");
		} else { //chosen LI
			ul.selectedIndex = i;
			//UL object will have this "selectedIndex" attribute, reflecting chosen LI index
			AddClass(obj,'selected');
	  		KillClass ( resolveCSSpath(obj,"<UL") , 'selectOpen');  //KillClass(obj.parentNode,'selectOpen');
		}//end if is chosen LI
  	}//end for
}//end fn

cachedImgs=new Array();
function cacheimgs(){
	for(var i=0;i<arguments.length;i++) {
		if(document.images){
			var l=cachedImgs.length;cachedImgs[l]=new Image();
			cachedImgs[l].src=arguments[i];
		}
	}
}

function setImgSrc(i,s){
	if(document.images){
		document.images[i].src=s;
	}
}

function setState(i,s){
	if(document.images){
		if(typeof(i)=="string"){
			i = document.images[i];
		}else if(i.nodeName && i.nodeName.toLowerCase() == "a"){
			i = resolveCSSpath(i,"IMG");
		}
		var xa=i.src.substring(0,i.src.lastIndexOf("-"));
		var xz=i.src.substring(i.src.lastIndexOf("."));
		i.src=xa+"-"+s+xz;
	}//end document.images;
}


//var sideDIVs = new Array( 'sideVlog', 'sidePopular' );
var sideDIVs = new Array( 'side' );

function labelClick(what){
	var r = resolveCSSpath(what, "< < INPUT");
	r.checked = true;
}


/* --- ibox scroll --- */

var scrollInterval, scrollAcceleration, scrollDirection, scrollObj, scrollInertia;

function scrollHome(what,val){
	var scrollObj = resolveCSSpath(what,"<.ibox .dscroll5");
	scrollObj.scrollTop = val?65536:0;
	return false;
}

function scrollToNow(what){
	var scrollObj = resolveCSSpath(what,"<.ibox .dscroll5");
	var ul = resolveCSSpath(scrollObj,"ul");
	if( !ul.lastHatched ){ return false; }

	var li = ul.lastHatched;
	var liOffset = Position.cumulativeOffset(li)[1] - Position.cumulativeOffset(ul)[1];

	s1 = scrollObj.scrollTop;
	s2 = Math.max( 0, liOffset - 40 );

	scrollObj.scrollTop = s2;
}

function startScroll(what) {
	scrollDirection = HasClass( resolveCSSpath(what,"<DIV"), "dscroll8" ) ? -1 : 1;
	scrollAcceleration = 1;
	scrollObj = resolveCSSpath(what,"<.ibox .dscroll5");
	scrollInterval = setInterval("doScrollInterval()",40);
	scrollInertia = false;
	return false;
}

function upScroll(element_id) {
	scrollDirection = -1;
	scrollAcceleration = 1;
	scrollObj = $(element_id);
	scrollInterval = setInterval("doScrollInterval()",40);
	scrollInertia = false;
	return false;
}

function downScroll(element_id) {
	scrollDirection = 1;
	scrollAcceleration = 1;
	scrollObj = $(element_id);
	scrollInterval = setInterval("doScrollInterval()",40);
	scrollInertia = false;
	return false;
}

function stopScroll(what){
	clearInterval ( scrollInterval );
	scrollInertia = false;
	return false;
}

function doScrollInterval(){
	scrollObj.scrollTop += scrollDirection * scrollAcceleration;
	if(!scrollInertia){
		if( scrollAcceleration < 16 ){ scrollAcceleration *= 1.2; }
	}else{
		if( scrollAcceleration > 1 ){
			scrollAcceleration *= 0.6;
		}else{
			clearInterval ( scrollInterval );
		}
	}
	if (scrollDirection > 0) {
		//oVLOG.loadNextPage();
	}
}


function hatch(what,xor){ //xor: 1, exclusive hatch in group. 2, exclusive and also hatch instead of toggle.
	var xor = xor ? xor : 0;

	var egg = resolveCSSpath(what,"<h3")
	if(egg){ //hatching H3
		if(what.nodeName != "IMG"){ what=resolveCSSpath(egg,'IMG'); }
		var img2state = ( what && what.nodeName == "IMG" && ( what.src.indexOf("-1.")>0 || what.src.indexOf("-0.")>0) );

		if(!HasClass(egg,"hatched")){
			AddClass(egg,"hatched");
			if ( img2state ){ setState(what,"1"); }
		}else{
			KillClass(egg,"hatched");
			if ( img2state ){ setState(what,"0"); }
		}


	}else{ //hatching content list LI
		egg = resolveCSSpath(what,"<.hatch");
		if(!egg){ egg = resolveCSSpath(what,"<LI"); }
		var eggParent = egg.parentNode;
		var img2state = ( what.nodeName == "IMG" && ( what.src.indexOf("-1.")>0 || what.src.indexOf("-0.")>0) );

		if(xor==2 || !HasClass(egg,"hatched")){
				AddClass(egg,"hatched");
				if( xor && eggParent.lastHatched && eggParent.lastHatched != egg){ KillClass( eggParent.lastHatched,"hatched" ); }
				eggParent.lastHatched = egg;
				if ( img2state ){ setState(what,"1"); }

			}else{
				KillClass(egg,"hatched");
				if( xor ){ eggParent.lastHatched = false; }
				if ( img2state ){ setState(what,"0"); }
			}//end hasclass

	}
	return false;
}

function setvis(l,v){
	$(l).style.display = v?"":"none";
}

function getvis(l){
	return !($(l).style.display=="none");
}

function setValue(s,v){
	switch(s.type){
	case "text"||"hidden"||"textarea":
		s.value=v;
		break;
	case "checkbox":
		s.checked=v;
		break;
	case "radio":
		break;
	case "select-one":
		setSelect(s,v);
		break;
	}
}

function setSelect(s,v){//set selectedIndex on s to the one holding value
	var so=s.options;
	for(var i=0;i<so.length;i++){
		if(so[i].value==v){
			s.selectedIndex=i;return;
		}//end if so
	}//end for
	//value was not found
	if(v==""){	//try again recursively using "0"
		setSelect(s,"0");
	}else{
		s.selectedIndex=-1;
	}
}

function getValue(fvinput){
	var fvinput=$(fvinput);
	var fviValue=false;
		switch(fvinput.type){
		case "text"||"hidden"||"textarea":
			fviValue=fvinput.value;
			break;
		case "checkbox":
			fviValue=fvinput.checked?1:0;
			break;
		case "radio":
			return getRadioValue(fvinput.form[fvinput.name]);
		case "select-one":
			var sx = fvinput.selectedIndex;
			if(sx<0)return false;
			fviValue=fvinput[sx].value;
			break;
		}
	return fviValue;
}

function getText(fvinput){
	var fvinput=$(fvinput);
	var fviValue="";

	switch(fvinput.type){
		case "select-one":
			if( fvinput[fvinput.selectedIndex] ){
				fviValue=fvinput[fvinput.selectedIndex].text;
			}
			break;
		default:
			fviValue=fvinput.value;
	}

	return fviValue;
}

function getRadioValue(r){
	if(!r.length){//only one element
		return(r.checked);
	}else{//multiple grouped elements
		for(var i=0;i<r.length;i++){
			if(r[i].checked){return r[i].value;}
		}
	}
	return false;
}

function resolveCSSpath(e,c){
	e=$(e); c=c.split(" ");

	for(var i=0;i<c.length;i++){

		if(c[i]=="<"){
			e=e.parentNode;
		}else if(c[i].charAt(0)=="#"){
			e=$( c[i].substring(1) );
			if(!e){return false;}
		}else if(c[i].charAt(0)=="."){
			var a=e.childNodes;var t=c[i].substring(1);var d=false;
				try {
					for(var b=0;b<a.length;b++){
						if(HasClass(a[b],t)){d=a[b];break;}
					}
				} catch (e) {
					alert("resolveCSSpath: " + e.description);
				}
				if(d){e=d;}else{return false;}
		}else if(c[i].charAt(0)=="<"){
			e=FindTagClassUp(e.parentNode,c[i].substring(1),"BODY");
			if(!e){return false;}
		}else{
			var a = e.getElementsByTagName( c[i].toLowerCase() );
			if(a[0]){
				e=a[0];
			}else{
				var a = document.getElementsByName(c[i]);
				if( a[0] ){ e=a[0]; }else{return false;}
			}
		}
	}
	return e;
};

function FindTagClassUp(elm,tcsearch,tclimit){
	var tc=(tcsearch+".").split(".");tc[0]=tc[0].toUpperCase();
	if(!tclimit){tclimit="BODY";};
	var tz=(tclimit+".").split(".");tz[0]=tz[0].toUpperCase();

	while(n=elm.nodeName){
		if(tc[0]==""||n==tc[0]){
			if(tc[1]==""||HasClass(elm,tc[1])){return elm;};};
		if(tz[0]==""||n==tz[0]){
			if(tz[1]==""||HasClass(elm,tz[1])){return false;};};
		elm=elm.parentNode;
	};
	return false;
};

/**** supporting functions ****/

function getBrowserSize(){var w,h1=false;if(window.innerWidth){w=window.innerWidth;h1=window.innerHeight;}else if(document.documentElement&&document.documentElement.clientWidth!=0){w=document.documentElement.clientWidth;h1=document.documentElement.clientHeight;}else if(document.body){w=document.body.clientWidth;h1=document.body.clientheight;};return new Array(w,h1);}

//event handlers from http://www.scottandrew.com/weblog/articles/cbs-events
function addEvent(obj,evType,fn,useCapture){if(obj.addEventListener){obj.addEventListener(evType,fn,useCapture);return true;}else if(obj.attachEvent){var r=obj.attachEvent("on"+evType,fn);return r;}else{window.status="Handler could not be attached";};}
function removeEvent(obj,evType,fn,useCapture){if(obj.removeEventListener){obj.removeEventListener(evType,fn,useCapture);return true;}else if(obj.detachEvent){var r=obj.detachEvent("on"+evType,fn);return r;}else{window.status="Handler could not be removed";};}

//*** This code is copyright 2002-2003 by Gavin Kistner and Refinery; www.refinery.com
//*** It is covered under the license viewable at http://phrogz.net/JS/_ReuseLicense.txt
function AddClass(obj,cName){var obj=$(obj);KillClass(obj,cName);return obj&&(obj.className+=(obj.className.length>0?' ':'')+cName);}
function KillClass(obj,cName){var obj=$(obj);return obj&&(obj.className=obj.className.replace(new RegExp("^"+cName+"\\b\\s*|\\s*\\b"+cName+"\\b",'g'),''));}
function HasClass(obj,cName){var obj=$(obj);return(!obj||!obj.className)?false:(new RegExp("\\b"+cName+"\\b")).test(obj.className);}