
// Global menu member
var myMenu;

function OnLoadLocalEvent()
{
	myMenu = new SDMenu("my_menu");
	myMenu.init();

	FinAndUnderlineCurrentLink();

	OnLoadHtmlLocal();


	PutMenuAtTheRightPlace();
}

window.resize	= PutMenuAtTheRightPlace;
window.onresize	= PutMenuAtTheRightPlace;
window.onload	= OnLoadLocalEvent;


function FinAndUnderlineCurrentLink()
{
	var lLinkArray = document.getElementsByTagName("a");

	var lDocumentUrl = document.location.href;

	if( lDocumentUrl.indexOf( ".php" ) <= 0 )
	{
		if( lDocumentUrl.indexOf( ".htm" ) <= 0 )
		{
			if( lDocumentUrl.indexOf( ".html" ) <= 0 )
			{
				lDocumentUrl += 'index.php';			/* la page par default */
			}
		}
	}	

	for( var lIndex = 0; lIndex < lLinkArray.length; lIndex++ )
	{
		var lLinkUrl = lLinkArray[ lIndex ].href;
		
		if( lLinkUrl )
		{
			var lHaveAGoodLink = ( lDocumentUrl == lLinkUrl);

			if( !lHaveAGoodLink )
			{
				if( lDocumentUrl.indexOf( lLinkUrl ) >= 0 )
				{
					lHaveAGoodLink = true;
				}
				else
				{
					if( lLinkUrl.indexOf( lDocumentUrl ) >= 0 )
					{
						lHaveAGoodLink = true;
					}
				}
			}
			
			if( lHaveAGoodLink)
			{
				if( lLinkArray[ lIndex ].id.indexOf("DontUnderline") < 0 ) 
				{
					lLinkArray[ lIndex ].style.textDecoration='underline';
				}
			}
		}
	}
}


function SDMenu(id) {
	if (!document.getElementById || !document.getElementsByTagName)
		return false;

	this.menu = document.getElementById(id);
	
	if( this.menu )
	{
		this.submenus = this.menu.getElementsByTagName("div");
		this.submenusTable = this.menu.getElementsByTagName("table");
	}


	this.remember = true;
	this.speed = 3;
	this.markCurrent = true;
	this.oneSmOnly = false;
}


SDMenu.prototype.FindMenuIndex = function( pSubmenu ){

/*	if( this.submenus[ i ] == submenu )
	{
	}*/


	for( var i=0; i < this.submenus.length; i++ )
	{
		

		if( ( this.submenus[ i ] == pSubmenu ) )
		{
			//alert( i );
			return i;
		}
		else
		{

			var lChildren = pSubmenu.parentNode;

			var lCount = 5;

			while( lChildren &&  (lCount > 0) )
			{
				lCount--;
				if( this.submenus[ i ] == lChildren )
				{
					return i;
				}

				lChildren = lChildren.parentNode;

				//submenu = submenu.offsetParent;//parentNode;
			}
		}
	}

	alert( 'Not found' );
	return -1;
};


SDMenu.prototype.init = function() {
	var mainInstance = this;

	if( !this.submenus ) { return; }

	for (var i = 0; i < this.submenus.length; i++)
	{
		if( GetCanChangeState( this.submenus[i] )  && this.submenus[i].getElementsByTagName("span")[0])
		{
			this.submenus[i].getElementsByTagName("span")[0].onclick = function() {  mainInstance.toggleMenu( mainInstance.FindMenuIndex( this.parentNode )  ); };
			
		}
	}

	if (this.markCurrent) {
		var links = this.menu.getElementsByTagName("a");
		for (var i = 0; i < links.length; i++)
			if (links[i].href == document.location.href) {
				links[i].className = "current";
				break;
			}
	}
	if (this.remember) {
		var regex = new RegExp("sdmenu_" + encodeURIComponent(this.menu.id) + "=([01]+)");
		var match = regex.exec(document.cookie);
		if (match) 
		{
			var states = match[1].split("");
			for (var i = 0; i < states.length; i++)
			{
				this.submenus[i].className = (states[i] == 0 ? "collapsed" : "");

				if( states[i] == 0 )
				{
					this.collapseMenuFast( i );
				}
			}
		}
		else
		{
			/* if no cookie, set state with the class name */
			for (var i = 0; i < this.submenus.length; i++)
			{
				if( this.submenus[i].className.indexOf("collapsed") >= 0 )
				{
					this.collapseMenuFast( i );
				}
			}
		}
	}
};
SDMenu.prototype.toggleMenu = function( pIndex ) {

	var submenu = this.submenus[ pIndex ];

	//pTableSubMenu


	if (submenu.className == "collapsed")
	{
		this.expandMenu( pIndex );
	}
	else
	{
		this.collapseMenu( pIndex );
	}
};
SDMenu.prototype.expandMenu = function( pIndex ) {

	var submenu = this.submenus[ pIndex ];

	var fullHeight = submenu.getElementsByTagName("span")[0].offsetHeight;
	var links = submenu.getElementsByTagName("a");
	for (var i = 0; i < links.length; i++)
		fullHeight += links[i].offsetHeight;
	var moveBy = Math.round(this.speed * links.length);
	
	var mainInstance = this;
	var intId = setInterval(function() {
		var curHeight = submenu.offsetHeight;
		var newHeight = curHeight + moveBy;
		if (newHeight < fullHeight)
			submenu.style.height = newHeight + "px";
		else {
			clearInterval(intId);
			submenu.style.height = "";
			submenu.className = "";

			mainInstance.memorize();
		}
	}, 30);
	this.collapseOthers(submenu);
};

SDMenu.prototype.collapseMenuFast = function( pIndex ) {
	var submenu = this.submenus[ pIndex ];
	var minHeight = submenu.getElementsByTagName("span")[0].offsetHeight;
	submenu.style.height = minHeight + "px";
	submenu.className = "collapsed";
};

SDMenu.prototype.collapseMenu = function( pIndex ) {

	var submenu = this.submenus[ pIndex ];

	var minHeight = submenu.getElementsByTagName("span")[0].offsetHeight;

	var moveBy = Math.round(this.speed * submenu.getElementsByTagName("a").length);
	var mainInstance = this;

	var intId = setInterval(function() {
		var curHeight = submenu.offsetHeight;
		var newHeight = curHeight - moveBy;


		if (newHeight > minHeight)
			submenu.style.height = newHeight + "px";

		else {
			clearInterval(intId);
			submenu.style.height = minHeight + "px";//"";

			submenu.className = "collapsed";

			mainInstance.memorize();
		}
	}, 30);
};

SDMenu.prototype.collapseOthers = function(submenu) {
	if (this.oneSmOnly) {
		for (var i = 0; i < this.submenus.length; i++)
			if (this.submenus[i] != submenu && this.submenus[i].className != "collapsed")
				this.collapseMenu( i );
	}
};
SDMenu.prototype.expandAll = function() {
	var oldOneSmOnly = this.oneSmOnly;
	this.oneSmOnly = false;
	for (var i = 0; i < this.submenus.length; i++)
		if (this.submenus[i].className == "collapsed")
			this.expandMenu( i );
	this.oneSmOnly = oldOneSmOnly;
};
SDMenu.prototype.collapseAll = function() {
	for (var i = 0; i < this.submenus.length; i++)
		if (this.submenus[i].className != "collapsed")
			this.collapseMenu( i );
};
SDMenu.prototype.memorize = function() {
	if (this.remember) {
		var states = new Array();
		for (var i = 0; i < this.submenus.length; i++)
			states.push(this.submenus[i].className == "collapsed" ? 0 : 1);
		var d = new Date();
		d.setTime(d.getTime() + (30 * 24 * 60 * 60 * 1000));
		document.cookie = "sdmenu_" + encodeURIComponent(this.menu.id) + "=" + states.join("") + "; expires=" + d.toGMTString() + "; path=/";
	}
};



function GetCanChangeState( pSubMenuDiv )
{
	//window.alert( this.submenus[0].className );

	if( pSubMenuDiv.className.indexOf( 'Fix' ) >=0 )
	{ 
		return false;
	}

	return true;
}


var PreloadImageArray = new Array();

function PreLoadRollHoverImage( pImageUrl )
{
	var lIndex = PreloadImageArray.length;				/* load image in cache */
	PreloadImageArray[ lIndex ] = new Image;
	PreloadImageArray[ lIndex ].src = pImageUrl;
}

function GetPreLoadImageByName( pImageUrl )
{
/*	for( var lIndex = 0; lIndex < PreloadImageArray.length; lIndex++ )
	{
		var lIndexOf = pImageUrl.indexOf( PreloadImageArray[ lIndex ].src );
		rPrintDebugInfo( 'Preload <br> '+ pImageUrl  + '<br>' + PreloadImageArray[ lIndex ].src +' Searrch result :' + lIndexOf  + '<br>' );
		if( lIndexOf >=0 )
		{
			rPrintDebugInfo('Find'+  pImageUrl + '  preloaded->' +PreloadImageArray[ lIndex ].src +'<br>' );
			return PreloadImageArray[ lIndex ].src;
		}
	}

	rPrintDebugInfo( 'Preload Introuvable : ' + pImageUrl  );*/
	return pImageUrl;
}

function SetNormalImage( pImage )
{
	var lFileName = pImage.src;

	var lNewFile = lFileName.replace( /hover.jpg/, '.jpg' )
	if( lNewFile != lFileName )
	{
		pImage.src = GetPreLoadImageByName( lNewFile );
		return;
	}

	lNewFile = lFileName.replace( /hover.gif/, '.gif' )
	if( lNewFile != lFileName )
	{
		pImage.src = GetPreLoadImageByName( lNewFile );
		return;
	}

	lNewFile = lFileName.replace( /hover.png/, '.png' )
	if( lNewFile != lFileName )
	{
		pImage.src = GetPreLoadImageByName( lNewFile );
		return;
	}


	//rPrintDebugInfo( 'Introuvable : ' + lFileName  );

	return;
} 

function SetHoverImage( pImage )
{	

	var lFileName = pImage.src;

	if( lFileName.indexOf( 'hover.jpg' ) >=0 )	{ return; } // Hover image is already there
	if( lFileName.indexOf( 'hover.gif' ) >=0 )	{ return; } // Hover image is already there
	if( lFileName.indexOf( 'hover.png' ) >=0 )	{ return; } // Hover image is already there

	var lNewFile = lFileName.replace( /.jpg/, 'hover.jpg' )
	if( lNewFile != lFileName )
	{
		pImage.src = GetPreLoadImageByName( lNewFile );
		return;
	}

	lNewFile = lFileName.replace( /.gif/, 'hover.gif' )
	if( lNewFile != lFileName )
	{
		pImage.src = GetPreLoadImageByName( lNewFile );
		return;
	}

	lNewFile = lFileName.replace( /.png/, 'hover.png' )
	if( lNewFile != lFileName )
	{
		pImage.src = GetPreLoadImageByName( lNewFile );
		return;
	}

	//rPrintDebugInfo( 'Introuvable : ' + lFileName );
	
	return;
}




function getDimensionXYWH( pElementIdName ){
	var lObject = document.getElementById(pElementIdName);

	if( !lObject )
	{
		return {x :0, y : 0, w : 0,  h : 0};	
	}

	var lObjectOffsetTop = 0;
	var lObjectOffsetLeft = 0;
	var lWidth = lObject.offsetWidth;
	var lHeight = lObject.offsetHeight;
	
	while( lObject != null )
	{
		lObjectOffsetTop += lObject.offsetTop;
		lObjectOffsetLeft += lObject.offsetLeft;
		lObject = lObject.offsetParent;
	}
	
	/*document.write('XYWH: '+lObjectOffsetLeft+','+lObjectOffsetTop+'-'+ lWidth+','+lHeight+' Nom:'+pElementIdName+'<br>');*/

	return {x : lObjectOffsetLeft, y : lObjectOffsetTop, w : lWidth,  h :lHeight };
}


function PutMeteoAtTheRightPlace() 
{
	var lEnglishObject = document.getElementById('EnglishId');
	var lMeteoDivObject = document.getElementById('MeteoDivId');

	if( lEnglishObject && lMeteoDivObject )
	{
		var lText =  lMeteoDivObject.innerHTML;

		if( lText.length <= 5 )
		{
			lMeteoDivObject.innerHTML = '<iframe marginheight="0" marginwidth="0" name="wxButtonFrame" id="wxButtonFrame" height="20" src="http://btn.meteomedia.ca/weatherbuttons/template4.php?placeCode=CAQC0360&category0=Cities&containerWidth=367&btnNo=&backgroundColor=blue&multipleCity=0&citySearch=0&celsiusF=C" align="top" frameborder="0" width="367" scrolling="no"></iframe>';
		}
		else
		{
			//window.alert('data found' + lMeteoDivObject.innerHTML.lentgh );
		}

		var lEnglishPosition = getDimensionXYWH('EnglishId');		
		var lMenuPosition = getDimensionXYWH('MenuHaut');

		lMenuPosition.x += lMenuPosition.w - lMeteoDivObject.offsetWidth;
		lEnglishPosition.y += lEnglishPosition.h;

		lMeteoDivObject.style.left = lMenuPosition.x+'px';
		lMeteoDivObject.style.top = lEnglishPosition.y+'px';
	}
}


function PutMenuAtTheRightPlace() 
{
	var lMenuPosition = getDimensionXYWH('MenuPositionId');
	var lObject = document.getElementById('my_menu');
	if( lObject )
	{
		var lX = (  parseInt(lMenuPosition.x) - 0 );
		var lY = (  parseInt(lMenuPosition.y) - 1 );

		lObject.style.left = lX + 'px';
		lObject.style.top = lY + 'px';

		var lMenuPosition2 = getDimensionXYWH('MenuPositionId');

		//rPrintDebugInfo( 'Position wanted : '+ lX+','+lY+'<br>Position fin : '+ lMenuPosition2.x+','+  lMenuPosition2.y );
	}

	PutMeteoAtTheRightPlace();

	return true;
}

function rPrintDebugInfo( pMessage )
{
	var lDebugParagraph = document.getElementById('DebugP');
	if( lDebugParagraph )
	{
		var lText = "\n"; lText += pMessage;

		lDebugParagraph.innerHTML += lText;
	}
}


function PrintCallStack() {

	alert(  Error().stack );
	PrintObjectDebugInfo( Error().stack );


    function StackFrame(funcName, funcSource, flName, lnNumber) {
        this.functionName = funcName;
        this.functionSource = funcSource;
        this.fileName = flName;
        this.lineNumber = lnNumber;
    }
    StackFrame.prototype.toString = function() {
        return 'at ' + this.functionName + '(' + this.fileName + ':' +  this.lineNumber + ')' ;
    };
    StackFrame.prototype.toHtml = function() {
        return '<table border="0">' +
        '<tr valign="top"><td><b>Name:  </b></td><td>'           + this.functionName                + '</td></tr>' +
        '<tr valign="top"><td><b>File:  </b></td><td>'           + this.fileName                    + '</td></tr>' +
        '<tr valign="top"><td><b>Line:  </b></td><td>'           + this.lineNumber                  + '</td></tr>' +
        '<tr valign="top"><td><b>Source:</b></td><td>' +
        ( this.functionSource ?
          '<pre>' + this.functionSource.toString().replace(/\</g, '&lt;').replace(/\>/g, '&gt;') + '</pre>' :
          'unavailable')                                                                            + '</td></tr>' +
        '</table>'
        ;

    };
    var stackFrameStrings = new Error().stack.split('\n');
    // remove first two stack frames
    stackFrameStrings.splice(0,2);
    var stackFrames = [];
    for (var i in stackFrameStrings) {
        // a stack frame string split into parts
        var stackFrame = stackFrameStrings[i].split('@');
        if (stackFrame && stackFrame.length == 2) {
            stackFrames.push(
            // Stackframe object
            new StackFrame(stackFrame[0],
                           eval(stackFrame[0].replace(callstack.sansParenthesisRE,'')),
                           stackFrame[1].match(callstack.fileNameLineNumberRE)[1], // first group
                           stackFrame[1].match(callstack.fileNameLineNumberRE)[2]  // second group
            )
            );
        }
    }

	PrintObjectDebugInfo( stackFrames );

}



function PrintObjectDebugInfo( pObject )
{
	var lMessage='';
	var lCount = 0;
	var lSkipCount = 0;

	

	for( lProprety in pObject )
	{
		if( pObject[ lProprety ] )
		{
			if( lSkipCount <= 0 )
			{
				lMessage= lCount + ':' + lProprety + 'value :'+ pObject[ lProprety ] + '  Type :'+  typeof lProprety +'  ; <br>';

				rPrintDebugInfo( lMessage );
			}
			else
			{
				lSkipCount--;
			}

			/*if( lCount > 150 )
			{
				lCount = 0;
				lMessage+= "\n";
			}*/

			lCount++;
		}
	}

	lMessage = lCount+' <- count '+ pObject +'\n' + lMessage + '  Type :'+  typeof lProprety +'<br><br>';
	

	//window.alert( lMessage ); 

	rPrintDebugInfo( lMessage );
}




