var PintSiteMap = 
{

	menuitems:[
	{}
	],

        createLoader : function(name) {
            var div = document.createElement('div');
            div.id = name + "loader";
            var span = document.createElement('span');
            var text = document.createTextNode('loading');
            span.appendChild(text);
            div.appendChild(span);
            document.getElementById('footer_inside').appendChild(div);
        },

        createPlaceHolder : function(name, title) {
            var div = document.createElement('div');
            div.id = name + "placeholder";
            var span = document.createElement('span');
            var text = document.createTextNode(title);
            span.appendChild(text);
            div.appendChild(span);
            document.getElementById('footer_inside').appendChild(div);
        },

        removeElement : function(id) {
            var el = document.getElementById(id);
            if(el !== null) {            
                el.parentNode.removeChild(el);
            }
            return el;
        },

        showLoader : function(name) {
            PintClientLogin.createLoader(name);
            YAHOO.util.Dom.setStyle(name + 'link', 'visibility', 'hidden');
            YAHOO.util.Dom.setStyle(name + 'loader', 'visibility', 'visible');
        },

        hideLoader : function(name, text) {
            PintClientLogin.createPlaceHolder(name, text);
            YAHOO.util.Dom.setStyle(name + 'loader', 'visibility', 'hidden');
            YAHOO.util.Dom.setStyle(name + 'placeholder', 'visibility', 'visible');
            YAHOO.util.Dom.setStyle(name + 'link', 'visibility', 'hidden');
        },

        hidePlaceHolder : function(name) {
            YAHOO.util.Dom.setStyle(name + 'placeholder', 'visibility', 'hidden');
            YAHOO.util.Dom.setStyle(name + 'link', 'visibility', 'visible');
        },

	createXHR : function () {

		try { return new XMLHttpRequest (); } catch ( e ) {}
		try { return new ActiveXObject("Msxml2.XMLHTTP.6.0");	} catch ( e ) {}
		try { return new ActiveXObject("Msxml2.XMLHTTP.3.0");	} catch ( e ) {}
		try { return new ActiveXObject("Msxml2.XMLHTTP");	} catch ( e ) {}
		try { return new ActiveXObject("Microsoft.XMLHTTP");	} catch ( e ) {}

		return null;

	},

        hidePanel : function() {
            PintSiteMap.panel.hide();
        },

    hideOtherPanels : function() {
        if(PintSearch !== null && document.getElementById('search') !== null) {
            PintSearch.hidePanel();
        }
        if(PintClientLogin !== null && document.getElementById('clientLogin') !== null) {
            PintClientLogin.hidePanel();
        }
    },

	handleResponse : function ( xhr, e ) {

		if ( xhr.readyState == 4 && xhr.status == 200 ) {
			var response = xhr.responseText;
            var currPage = null;

            document.getElementById('siteMapHolder').innerHTML = response;
			
            if (!PINT.pageCidGeneology) { 
				PINT.pageCidGeneology = []; 
				PINT.pageCidGeneology[0] = '3'; /* Homepage Cid = 3 */
			}
            
			for (var i = 0; i < PINT.pageCidGeneology.length; i++) {
				currPage = document.getElementById('siteMap'+ PINT.pageCidGeneology[i]);
				if (currPage) { break; }
			}

			if (currPage) {
    			currPage.style.backgroundColor = '#f6a00a';
    			var pageClasses = currPage.className;
    			currPage.className = pageClasses + ' mapCurrentPage';
    			currPage.style.backgroundRepeat = 'no-repeat';
    			currPage.style.backgroundPosition = 'right';
			}

               PintSiteMap.panel = new YAHOO.widget.Panel("sitemap", { 
				    width:"830px",  
				    height: "440px",
				    fixedcenter: true, 
				    modal : true, 
				    close:true,  
				    visible:false,
                    effect:{effect:YAHOO.widget.ContainerEffect.FADE,duration:0.25}} 
			); 

            YAHOO.util.Event.addListener('closePanelLink', 'click', function() { PintSiteMap.panel.hide(); });
			PintSiteMap.panel.beforeHideEvent.subscribe(function(){PintSiteMap.hideSiteMap(PintSiteMap.panel);});
			PintSiteMap.panel.render ();
			YAHOO.util.Dom.setStyle("sitemap", 'display', "");
			PintSiteMap.displaySiteMap ( e, PintSiteMap.panel );
		}
	},

	init: function(e)
	{
           
        PintSiteMap.hideOtherPanels();
        if (PintSearch !== null) { PintSearch.disableSearch(); }
		var xhr = PintSiteMap.createXHR ();

		if ( xhr ) {
            PintSiteMap.showLoader('sitemap');
			xhr.open ( "POST", PINT.siteMapPath, true );
            xhr.onreadystatechange = function () { PintSiteMap.handleResponse ( xhr, e ); };
            xhr.send ( null );
            YAHOO.util.Event.preventDefault ( e );
		} else {
            return true;
        }
	},

	displaySiteMap: function(e, panel)
	{
	    var anim = new YAHOO.util.Anim("sitemap_mask", {opacity: {from: 0, to:0.65}}, 0.25); 
            var rootAnim = PintSiteMap.createAnimations();

            var subElements = YAHOO.util.Dom.getElementsByClassName('linkSitemap', 'a', 'sitemap'); 
            for (var i=0;i<subElements.length;i++){
                YAHOO.util.Event.addListener(subElements[i], 'mouseover', PintSiteMap.showScreenShot);
                YAHOO.util.Event.addListener(subElements[i], 'mouseout', PintSiteMap.hideScreenShot);
            }            
            anim.onComplete.subscribe(function(){
                PintSiteMap.hideLoader('sitemap', 'Site Map');
                panel.show();
                rootAnim.animate();
            });
            anim.animate();
	},

    animations : [],

    createAnimations : function() {
        var animations = [];

        var homeLink = document.getElementById('siteMap3');
        var roots = YAHOO.util.Dom.getElementsByClassName('siteMapRootList', 'ul', 'sitemap');
        
        var homeAnim = new YAHOO.util.Anim(homeLink, {opacity: {from: 0, to:1}}, 0.01);

        for(var i=0; i<roots.length; i++) {
            var anims = [];
            var children = YAHOO.util.Dom.getElementsByClassName('linkSitemap', 'a', roots[i]);
            for(var j=0; j<children.length; j++) {
               var anim = new YAHOO.util.Anim(children[j], {opacity: {from: 0, to:1}}, 0.01);
               anim.index = j;
               anim.anims = anims;
               anim.child = children[j];
               anim.onStart.subscribe(function() { this.child.style.display = "block"; this.child.parentNode.getElementsByTagName("ul")[0].style.display = "block"; } );
               anim.onComplete.subscribe(function() { this.anims[this.index+1].animate(); });
               anims.push(anim);
            }
            animations.push(anims);
        }

        homeAnim.onComplete.subscribe(function() {
            for(var k=0; k<animations.length; k++) {
                if(animations[k] !== null && animations[k] !== undefined && animations[k].length > 0) {
                    animations[k][0].animate();
                }
            }
        });

        return homeAnim;
    },

	hideSiteMap: function(panel)
	{

		var elements = YAHOO.util.Dom.getElementsByClassName('mainLinkSitemap', 'a'); 
		for (var i=0;i<elements.length;i++) {
			YAHOO.util.Dom.setStyle(elements[i], 'opacity', 0);
        }

		elements = YAHOO.util.Dom.getElementsByClassName('subLinkSitemap', 'a'); 
		for (i=0;i<elements.length;i++){
			YAHOO.util.Dom.setStyle(elements[i], 'opacity', 0);
			YAHOO.util.Dom.setStyle(elements[i], 'display', 'none');
		}

		var anim = new YAHOO.util.Anim("sitemap_mask", {opacity: {from: 0.65, to:0}}, 0.25);
        anim.onComplete.subscribe(function() {
            PintSiteMap.hidePlaceHolder('sitemap');
            
            var node = document.getElementById('sitemap_mask');
            if(node !== null && node !== undefined) {
                node.parentNode.removeChild(node);
            }

            node = document.getElementById('siteMapHolder');
            if(node !== null && node !== undefined) {
                node.removeChild(node.childNodes[0]);
            }

            if(PintSearch !== null) { PintSearch.enableSearch(); }
        });
		anim.animate();
	},
 
	showScreenShot: function(e){
		var animation = null;
		var obj = YAHOO.util.Dom.getNextSibling(this);
		if (YAHOO.util.Dom.hasClass(obj, "screenshot")) {
			animation = new YAHOO.util.Anim(obj, {opacity: {from: 0, to:1}}, 0.25);
        }
			
		if (animation){
			obj.style.display = "block";
			animation.animate();	
		}
	},
	
	hideScreenShot: function(e){
		var animation = null;
		var obj = YAHOO.util.Dom.getNextSibling(this);
		if (YAHOO.util.Dom.hasClass(obj, "screenshot")) {
			animation = new YAHOO.util.Anim(obj, {opacity: {from: 1, to:0}}, 0);
        }
			
		if (animation) {
			obj.style.display = "";
			animation.animate();	
		}
	},
	
    animateChildren : function(ul){
        var animations = PintSiteMap.animations;
        var numAnims = animations.length;
        var innerAnims = animations[numAnims-1];

        var getAnimation = function(index) {
            return function() { innerAnims[index+1].animate(); };
        };

        var kids = YAHOO.util.Dom.getElementsByClassName('subLinkSitemap', 'a', ul);
        ul.style.display = "block";

        for(var i=0; i<kids.length; i++) {
	    innerAnims.push(new YAHOO.util.Anim(kids[i], {opacity: {from: 0, to:1}}, 0.01));
            innerAnims[innerAnims.length-1].onComplete.subscribe(getAnimation(innerAnims.length-1));
            kids[i].style.display = "block";
        }
    },

    toggleChildren: function(e){

		var animations = [];
		var getAnimation = function(index){
			return function(){animations[index].animate();};
		};
		
        var showChildren = function(ul){
            ul.style.display = "block";
    		var objs = ul.getElementsByTagName("a");
    		for (var i=0;i<objs.length;i++){
    			var obj = objs[i];
    			if (YAHOO.util.Dom.hasClass(obj, "subLinkSitemap")){
    				animations.push(new YAHOO.util.Anim(obj, {opacity: {from: 0, to:1}}, 0.1));
    				obj.style.display = "block";
    			}
    		}
    	
    		for (i=0;i<animations.length-1;i++){
    			animations[i].onComplete.subscribe(getAnimation(i+1));	
    		}
    	
    		if (animations.length) {
    			animations[0].animate();
            }	
	   };

	    var hideChildren = function(ul){
			var objs = ul.getElementsByTagName("a");
			for (var i=0;i<objs.length;i++){
				var obj = objs[i];
				if (YAHOO.util.Dom.hasClass(obj, "subLinkSitemap")){
					animations.push(new YAHOO.util.Anim(obj, {opacity: {from: 1, to:0}}, 0.1));
					//obj.style.display = "none";
				}
			}
	
			for (i=animations.length-1;i>0;i--) {
				animations[i].onComplete.subscribe(getAnimation(i-1));	
            }
	 
			
			if (animations.length){
				animations[0].onComplete.subscribe(function(){ul.style.display = "none";});
				animations[animations.length-1].animate();	
			}
		};

		var parentNode = this.parentNode;
		var ul = parentNode.getElementsByTagName("ul");
		if (ul.length > 0){
			if (ul[0].style.display == "block") {
				hideChildren(ul[0]);
			} else {
				showChildren(ul[0]);
            }
			YAHOO.util.Event.preventDefault(e);
		}
	}
};

if (!(PINT.util.browser.bMac && PINT.util.browser.bFirefox)){
	YAHOO.util.Event.addListener('sitemaplink', 'click', PintSiteMap.init);
}
