// *************************************************************
//  Global Javascript
// *************************************************************

// *************************************
// Global Events
// *************************************
// Page dom fully formed. 
//var onPageReady = new YAHOO.util.CustomEvent("onPageReady");
// Application Objects have been intialised with any dynamic data
//var onPageInitialised = new YAHOO.util.CustomEvent("onPageInitialised");



//var processID = "";
var contentHeight = 0;
var leftColumnWidth = 170;
var contentToolBarHeight = 26;
var contentToolBarHeightCollapsed = 0;
var pageMargin = 10;
var Splitter;
var SplitterWidth=0;

var initialLoad = true;


  //Initialise the variables for the resize timer.
    var plngResizeTimerID = 0;
    var plngResizeTimeout  = 1;     //mSeconds
    
// *************************************
// Browser Detect - http://www.quirksmode.org/js/detect.html
// *************************************

    function showURL3(extURL) {
        var tabs = new Ext.TabPanel({
            region: 'center',
            margins: '3 3 3 0',
            activeTab: 0,
            defaults: {
                autoScroll: true
            },
            items: [{
                title: 'Bogus Tab'
            }, {
                title: 'Another Tab'
            }, {
                title: 'Closable Tab',
                closable: true
}]
            });

            // Panel for the west
            var nav = new Ext.Panel({
                title: 'Navigation',
                region: 'west',
                split: true,
                width: 200,
                collapsible: true,
                margins: '3 0 3 3',
                cmargins: '3 3 3 3'
            });

            var win = new Ext.Window({
                title: 'Layout Window',
                closable: true,
                width: 600,
                height: 350,
                //border : false,
                //plain: true,
                layout: 'border',
                items: [nav, tabs]
            });
            win.show();
        return win;
    }

    function showURL1(extURL) {
        var win = new Ext.Window({
            width: 400,
            height: 400,
            layout: 'fit',
            items: [new Ext.ux.ManagedIframePanel(
                    {
                        defaultSrc: extURL,
                        loadMask: false
                    }
                  )]
        });

        win.show();
        return win;
    }

    function testtitle2(iframe, winId) {
        var win = Ext.getCmp(winId);
        win.setTitle(iframe.getFrameDocument().title);
        //calc current offsets for Window body border and padding
        var bHeightAdj = win.body.getHeight() - win.body.getHeight(true);
        var bWidthAdj = win.body.getWidth() - win.body.getWidth(true);

        win.setSize(iframe.getFrameBody().scrollWidth + win.getFrameWidth() + bWidthAdj, iframe.getFrameBody().scrollHeight + win.getFrameHeight() + bHeightAdj+10)
    }

    TestTitle = function testTitle(frame) {
        testtitle2(frame);
    }


    function showURL2(url) {
        // generate id
        var winId = (new Date()).getTime().toString();
        url += "?WID="+winId
        var win = new Ext.Window({
            id: winId,
            width: 400,
            height: 400,
            layout: 'fit',
            items: [{
                xtype: 'iframepanel',
                layout: 'fit',
                defaultSrc: url,
                loadMask: { msg: 'Loading. Please wait...' },
                listeners: { documentloaded: function() { testtitle2(this, winId); } }
            }]
        });

        win.show();
        return win;
    }
    
    
    function showURL(extURL) {
        var win = new Ext.Window({
            width: 400
            , height: 300
            , autoScroll: true
             , autoLoad: {url: extURL}
             , title: 'Help'
             , listeners: { show: function() {
                 this.loadMask = new Ext.LoadMask(this.body, {
                     msg: 'Loading. Please wait...'
                 });
             }}
        });

        win.show();
        return win;
    }    
   
   
    
var BrowserDetect = {
	init: function () {
		this.browser = this.searchString(this.dataBrowser) || "An unknown browser";
		this.version = this.searchVersion(navigator.userAgent)
			|| this.searchVersion(navigator.appVersion)
			|| "an unknown version";
		this.OS = this.searchString(this.dataOS) || "an unknown OS";
	},
	searchString: function (data) {
		for (var i=0;i<data.length;i++)	{
			var dataString = data[i].string;
			var dataProp = data[i].prop;
			this.versionSearchString = data[i].versionSearch || data[i].identity;
			if (dataString) {
				if (dataString.indexOf(data[i].subString) != -1)
					return data[i].identity;
			}
			else if (dataProp)
				return data[i].identity;
		}
	},
	searchVersion: function (dataString) {
		var index = dataString.indexOf(this.versionSearchString);
		if (index == -1) return;
		return parseFloat(dataString.substring(index+this.versionSearchString.length+1));
	},
	dataBrowser: [
		{ 	string: navigator.userAgent,
			subString: "OmniWeb",
			versionSearch: "OmniWeb/",
			identity: "OmniWeb"
		},
		{
			string: navigator.vendor,
			subString: "Apple",
			identity: "Safari"
		},
		{
			prop: window.opera,
			identity: "Opera"
		},
		{
			string: navigator.vendor,
			subString: "iCab",
			identity: "iCab"
		},
		{
			string: navigator.vendor,
			subString: "KDE",
			identity: "Konqueror"
		},
		{
			string: navigator.userAgent,
			subString: "Firefox",
			identity: "Firefox"
		},
		{
			string: navigator.vendor,
			subString: "Camino",
			identity: "Camino"
		},
		{		// for newer Netscapes (6+)
			string: navigator.userAgent,
			subString: "Netscape",
			identity: "Netscape"
		},
		{
			string: navigator.userAgent,
			subString: "MSIE",
			identity: "Explorer",
			versionSearch: "MSIE"
		},
		{
			string: navigator.userAgent,
			subString: "Gecko",
			identity: "Mozilla",
			versionSearch: "rv"
		},
		{ 		// for older Netscapes (4-)
			string: navigator.userAgent,
			subString: "Mozilla",
			identity: "Netscape",
			versionSearch: "Mozilla"
		}
	],
	dataOS : [
		{
			string: navigator.platform,
			subString: "Win",
			identity: "Windows"
		},
		{
			string: navigator.platform,
			subString: "Mac",
			identity: "Mac"
		},
		{
			string: navigator.platform,
			subString: "Linux",
			identity: "Linux"
		}
	]

};
BrowserDetect.init();    
    
// *************************************
// Startup Handlers - called from Master
// *************************************



        function RequestError(sender, e)
        {
            alert(e.Status);
            alert(e.ResponseText);
            alert(e.ResponseHeaders);
            return false;
        }
        function HandleAJAXError(e, clientID)
        {
            alert(e.message);
        }

    function OnPageError(Result) { 
	    document.body.style.cursor = 'default'; 
        //alert("*** OnPageError captured a CallbackMethod error:\r\n\r\n" + Result.message) 
    }
      

	function ResizePage() {
		adjustLayout();
		onPageResize.fire();
    }
    
    
    function fixedContentLayout(){
        Splitter = $j("#splitter");
        SplitterWidth = Splitter.outerWidth();

        $j("#rightColumn").css("left",leftColumnWidth+SplitterWidth);
        Splitter.css("left",leftColumnWidth);
        $j("#leftColumn").width(leftColumnWidth);    
        $j("#leftColumn").show();
        Splitter.show();
	}

	/**
	* Adjust the Layout of the Page.
	* Dynamically sizes the height of content containers relative to the 
	* height of the page. Inner content must be sized first, e.g. folderList
	* before navbarDisplay.
	*/
	function adjustLayout(){
        contentHeight = $j(window).height()-$j("#header").outerHeight()-$j("#footer").outerHeight()-pageMargin-pageMargin;
	}
	

	/* History Management Code */
    /****************************/
    
    // Safri fires a change every time the history is set ??
//    function historyChange(newLocation, historyData) {
//        if (BrowserDetect.browser != 'Safari') { // Fix for Safri remove on new version of history
//            if (!sVars.IsAdminSite) SDApplicationHistoryChange(newLocation, historyData); // Admin has no history
//        }
//    }
//    
	/* History Management Code */
    /****************************/
	
    function ExpandParents(tree, node){
       try {
           while(node.Parent != null){
               node.Parent.Expand();
               node = node.Parent;
           }
       } catch (e){logE("Global - ExpandParents",e);}
    }
	
	/* Splitter Management Code */
    /****************************/
	
	function spliterEvent(){
	    var leftCol = $j("#leftColumn");
	    var rightCol = $j("#rightColumn");
	    var mainWidth = $j("#main").outerWidth();
	    
		if (leftCol.outerWidth() != leftColumnWidth) {
		    leftCol.width(leftColumnWidth);
            Splitter.css("left",leftColumnWidth);
            rightCol.width(mainWidth-SplitterWidth-leftColumnWidth);
            rightCol.css("left",leftColumnWidth+SplitterWidth);		    
	    } else {
		    leftCol.width(0);
            Splitter.css("left",0);
            rightCol.width(mainWidth-SplitterWidth);
            rightCol.css("left",SplitterWidth);		    
	    }
	    
	    ResizePage;
    }
 

    function SearchDisplayedTbclick_handler(sender, e) {
        $j(sVars.SearchOptionsContentID).hide();
        $j(sVars.PageOptionsPanelID).show();
    }
   

    /* Ad Code */
    /***********/

    function ShowAd(){
        //*if ($get('HeadingAd') != undefined) xShow($get('HeadingAd'));
        $j("#HeadingAd").show();
    }
    
    function HideAd(){
       //*if ($get('HeadingAd') != undefined ) xHide($get('HeadingAd'));
       $j("#HeadingAd").hide();
   }







function GetAd_Callback(Result){
    try {
        var adContainer = $j('#HeadingAd');
        adContainer.empty();
        adContainer.append(Result); 
   } catch (e){logE("Global - GetAd_Callback",e);}
}

 

// *****************************
// Tree Setup and Utilities
// *****************************

function TreeData(treeData){
    try {
        this.Nodes = treeData.N; // Nodes
        this.findNodeByValue = 
            function(value){
                for (var x=0; x < this.Nodes.length; x++ ){
                    var node = this.Nodes[x];
                    var thisNode = FindNodeInData(node,value);
                    if (thisNode != null) return thisNode;
                }
                return null;
            }
   } catch (e){logE("Global - TreeData",e);}
}

function FindNodeInData(node,value){
    try {
        if (node.V == value) return node;
        for (var x=0; x < node.N.length; x++ ){
            var CNode = node.N[x];
            var thisNode = FindNodeInData(CNode,value);
            if (thisNode != null) return thisNode;
        }
        return null;
   } catch (e){logE("Global - FindNodeInData",e);}

}

function FindNodeInTree(node, value) {
    try {
        if (node.V == value) return node;
        for (var x = 0; x < node.N.length; x++) {
            var CNode = node.N[x];
            var thisNode = FindNodeInData(CNode, value);
            if (thisNode != null) return thisNode;
        }
        return null;
    } catch (e) { logE("Global - FindNodeInData", e); }
}

function RenderTree(tree, treeData){
    try {
        tree.get_nodes().clear();
        for (var x=0; x < treeData.Nodes.length; x++ ){
            var NodeData = treeData.Nodes[x];
            var node = CreateTreeNode(NodeData)
            tree.get_nodes().add(node);
            if (NodeData.N != null) AddTreeNodes(node,NodeData);
        }
   } catch (e){logE("Global - RenderTree",e);}
}

function AddTreeNodes(parentNode, parentNodeData){
    try {
        for (var x=0; x < parentNodeData.N.length; x++ ){
            var NodeData = parentNodeData.N[x];
            var node = CreateTreeNode(NodeData)
            parentNode.get_nodes().add(node);
            if (NodeData.N  != null) AddTreeNodes(node,NodeData);
        }
   } catch (e){logE("Global - AddTreeNodes",e);}
}

function CreateTreeNode(nodeData){
    try {
        var node = new Telerik.Web.UI.RadTreeNode();
        node.set_text(nodeData.T);
        node.set_value(nodeData.V);
        node.set_category(nodeData.C);
        if ( nodeData.I != null) node.set_imageUrl(nodeData.I);
        node.set_expanded(nodeData.E);
        if ( nodeData.M != null) node.set_contextMenuID( nodeData.M);
        else  node.set_enableContextMenu(false);
        return node;
   } catch (e){logE("Global - CreateTreeNode",e);}
}

// returns category
function ShowTreeNode(tree, value){
    try {
        tree.unselectAllNodes();
        var treeNode = tree.findNodeByValue(value);
        if (treeNode != null) {
            try {
                var node = treeNode;
                while (node = node.get_parent()) node.expand();
            } catch(e){} // if top level wont have expand function
            treeNode.select();
            treeNode.highlight();
            return treeNode.get_category();
        }
   } catch (e){logE("Global - ShowTreeNode",e);}
}

// *****************************
// Ajax Loading
// *****************************

function AjaxLoadingImage(elementId){
    try {
        this.Container = $j("#"+elementId);
        this.LoadingingImage = $j(new Image());
        this.LoadingingImage.attr('src', 'http://img1.neighbournet.com/resource/background/ajax-loader.gif');
        this.LoadingingImage.attr('alt', 'Loading ....');
        this.LoadingingImage.css('position','absolute')
        this.LoadingingImage.hide()

        this.Container.append(this.LoadingingImage);  
         
        this.show = 
            function(){ 
                cW = this.Container.outerWidth();
                cH = this.Container.outerHeight();
                iW = this.LoadingingImage.width();
                iH = this.LoadingingImage.height();
                this.LoadingingImage.css('top',cH/2-iH/2);
                this.LoadingingImage.css('left',cW/2 - iW/2);
                this.LoadingingImage.show();
            }

        this.hide = 
            function(){
                this.LoadingingImage.hide()
            }

   } catch (e){logE("Global - AjaxLoadingImage",e);}

}

// *****************************
// Refresh handlers
// *****************************

//function RefreshAll() {
//    onRefreshContent.fire();
//    onRefreshNavigation.fire()
//    NNet.CurrentUser.updateStatus();
//}

//function RefreshAllPopUp() {
//    onRefreshNavigation.fire()
//    NNet.CurrentUser.updateStatus();
//    window.setTimeout('RefreshContent();', 1);
//}

function RefreshContentPopUp() {
    // This required as a direct call initiated from an iframe (popup window) causes
    // an xhttp error in Firefox when a call back is called.
    window.setTimeout('RefreshContent();', 1);
}

function RefreshNavAndContent() {
    onRefreshContent.fire();
    onRefreshNavigation.fire()
}
function RefreshNavAndContentPopUp() {
    onRefreshNavigation.fire()
    window.setTimeout('RefreshContent();', 1);
}

function RefreshContent() {
    onRefreshContent.fire();
}

function RefreshNavigation() {
    onRefreshNavigation.fire();
}


// *****************************
// Logging
// *****************************
function logE(message, e){
    if ( sVars.JavaScriptLogging ) {
        log( message + ' : ' + e.name + ' : ' + e.message);
        throw e;
    }
}

function log(message) {
    if ( sVars.JavaScriptLogging ) {
        if (!log.window_ || log.window_.closed) {
            var win = window.open("", null, "width=400,height=200," +
                                  "scrollbars=yes,resizable=yes,status=no," +
                                  "location=no,menubar=no,toolbar=no");
            if (!win) return;
            var doc = win.document;
            doc.write("<html><head><title>Debug Log</title></head>" +
                      "<body></body></html>");
            doc.close();
            log.window_ = win;
        }
        var logLine = log.window_.document.createElement("div");
        logLine.appendChild(log.window_.document.createTextNode(message));
        log.window_.document.body.appendChild(logLine);
    }
}



