/*
 * Ext JS Library 2.0.1
 * Copyright(c) 2006-2008, Ext JS, LLC.
 * Open Source Licence:
 * Ext is being used in a commercial application 
 * that is not a software development library or 
 * toolkit and respects all LGPL requirements.
 */
var AjaxCommentary;
var AjaxRadio;

 Ext.ux.Portal = Ext.extend(Ext.Panel, {
    layout: 'column',
    autoScroll:true,
    cls:'x-portal',
    defaultType: 'portalcolumn',
    initComponent : function(){
        Ext.ux.Portal.superclass.initComponent.call(this);
        this.addEvents({
            validatedrop:true,
            beforedragover:true,
            dragover:true,
            beforedrop:true,
            drop:true
        });
    },

    initEvents : function(){
        Ext.ux.Portal.superclass.initEvents.call(this);
        this.dd = new Ext.ux.Portal.DropZone(this, this.dropConfig);
    }
});
Ext.reg('portal', Ext.ux.Portal);

Ext.ux.Portal.DropZone = function(portal, cfg){
    this.portal = portal;
    Ext.dd.ScrollManager.register(portal.body);
    Ext.ux.Portal.DropZone.superclass.constructor.call(this, portal.bwrap.dom, cfg);
    portal.body.ddScrollConfig = this.ddScrollConfig;
};

Ext.extend(Ext.ux.Portal.DropZone, Ext.dd.DropTarget, {
    ddScrollConfig : {
        vthresh: 50,
        hthresh: -1,
        animate: true,
        increment: 200
    },

    createEvent : function(dd, e, data, col, c, pos){
        return {
            portal: this.portal,
            panel: data.panel,
            columnIndex: col,
            column: c,
            position: pos,
            data: data,
            source: dd,
            rawEvent: e,
            status: this.dropAllowed
        };
    },

    notifyOver : function(dd, e, data){
        var xy = e.getXY(), portal = this.portal, px = dd.proxy;

        // case column widths
        if(!this.grid){
            this.grid = this.getGrid();
        }

        // handle case scroll where scrollbars appear during drag
        var cw = portal.body.dom.clientWidth;
        if(!this.lastCW){
            this.lastCW = cw;
        }else if(this.lastCW != cw){
            this.lastCW = cw;
            portal.doLayout();
            this.grid = this.getGrid();
        }

        // determine column
        var col = 0, xs = this.grid.columnX, cmatch = false;
        for(var len = xs.length; col < len; col++){
            if(xy[0] < (xs[col].x + xs[col].w)){
                cmatch = true;
                break;
            }
        }
        // no match, fix last index
        if(!cmatch){
            col--;
        }

        // find insert position
        var p, match = false, pos = 0,
            c = portal.items.itemAt(col),
            items = c.items.items;

        for(var len = items.length; pos < len; pos++){
            p = items[pos];
            var h = p.el.getHeight();
            if(h !== 0 && (p.el.getY()+(h/2)) > xy[1]){
                match = true;
                break;
            }
        }

        var overEvent = this.createEvent(dd, e, data, col, c,
                match && p ? pos : c.items.getCount());

        if(portal.fireEvent('validatedrop', overEvent) !== false &&
           portal.fireEvent('beforedragover', overEvent) !== false){

            // make sure proxy width is fluid
            px.getProxy().setWidth('auto');

            if(p){
                px.moveProxy(p.el.dom.parentNode, match ? p.el.dom : null);
            }else{
                px.moveProxy(c.el.dom, null);
            }

            this.lastPos = {c: c, col: col, p: match && p ? pos : false};
            this.scrollPos = portal.body.getScroll();

            portal.fireEvent('dragover', overEvent);

            return overEvent.status;;
        }else{
            return overEvent.status;
        }

    },

    notifyOut : function(){
        delete this.grid;
    },

    notifyDrop : function(dd, e, data){
        delete this.grid;
        if(!this.lastPos){
            return;
        }
        var c = this.lastPos.c, col = this.lastPos.col, pos = this.lastPos.p;

        var dropEvent = this.createEvent(dd, e, data, col, c,
                pos !== false ? pos : c.items.getCount());

        if(this.portal.fireEvent('validatedrop', dropEvent) !== false &&
           this.portal.fireEvent('beforedrop', dropEvent) !== false){

            dd.proxy.getProxy().remove();
            dd.panel.el.dom.parentNode.removeChild(dd.panel.el.dom);
            if(pos !== false){
                c.insert(pos, dd.panel);
            }else{
                c.add(dd.panel);
            }
            
            c.doLayout();

            this.portal.fireEvent('drop', dropEvent);

            // scroll position is lost on drop, fix it
            var st = this.scrollPos.top;
            if(st){
                var d = this.portal.body.dom;
                setTimeout(function(){
                    d.scrollTop = st;
                }, 10);
            }

        }
        delete this.lastPos;
    },

    // internal cache of body and column coords
    getGrid : function(){
        var box = this.portal.bwrap.getBox();
        box.columnX = [];
        this.portal.items.each(function(c){
             box.columnX.push({x: c.el.getX(), w: c.el.getWidth()});
        });
        return box;
    }
});

Ext.ux.PortalColumn = Ext.extend(Ext.Container, {
    layout: 'anchor',
    autoEl: 'div',
    defaultType: 'portlet',
    cls:'x-portal-column'
});

Ext.reg('portalcolumn', Ext.ux.PortalColumn);

Ext.ux.Portlet = Ext.extend(Ext.Panel, {
    anchor: '100%',
    frame:true,
    collapsible:true,
    draggable:true,
    cls:'x-portlet'
 
});

Ext.reg('portlet', Ext.ux.Portlet);


var index=2;
var addTab = function() {
	var tabPanel = Ext.getCmp('tab-portals');
	tabPanel.add({
			title:'Page '+index,
            xtype:'portal',
			closable: true,
			
			region:'center',
			id:'mr-portal'+index,
            margins:'0 5 5 0',
            items:[{
                columnWidth:.5,
                style:'padding:10px 0 10px 10px',
				id:'mr-portal'+index+'-left'
                },{
                columnWidth:.5,
                style:'padding:10px',
				id: 'mr-portal'+index+'-right'
            }]
        }).show();
	index++;
};

	// Init the singleton.  Any tag-based quick tips will start working.


    var tools = [{
        id:'gear',
        handler: function(e, target, panel){
				if (Ext.getCmp('win'+panel.id) != null)
					return;
				var called = false;
				var doReprocess = function(Cmp) 
				{
					if (!called){
						called=true;
						Cmp.close();
						Cmp.destroy();
						nextWindow.show();
					}
				}
				var nextWindow;
				var window = {
				title:"Settings",
			    id: 'win'+panel.id,
				width:300,
				height:250,
				stateful:false,
				listeners: {
					show: function(window) {
						doReprocess(this);
						return true;
					}
				},
				items:[{
					xtype:'form',  
					title:'Board Properties',
					id:'settingForm'+panel.id,
			        defaultType: 'checkbox',
			        items: [
						{
							fieldLabel: 'Sound',
							name: 'Sound',
							checked: chessObj[panel.id].sound,
							id: 'sound'+panel.id,
							listeners: {
								
								check:function(node, checked){
									
									if (checked){
									
										chessObj[panel.id].sound=true;
										chessObj[panel.id].__addSoundEffects();
										chessObj[panel.id].animate=true;
									
									}else{
										chessObj[panel.id].sound=false;
									}
								}
							
							}
						},
						{
							fieldLabel: 'Animate',
							name: 'Animate',
							id:'animate'+panel.id,
							checked: chessObj[panel.id].animate,
							listeners: {
								check:function(node, checked){
									
									if (checked){
										chessObj[panel.id].animate=true;
										
									
									}else{
										chessObj[panel.id].animate=false;
									}
								}
							}			
						},
						{
							fieldLabel: 'Move Speed',
							name: 'delay',
							xtype: 'numberfield',
							id:'delay'+panel.id,
							width:30,
							value: chessObj[panel.id].autoPlayDelayBetweenMoves,
							listeners: {
								change:function(node, newVal, oldVal){
									
									if (newVal != oldVal && newVal!=""){
										chessObj[panel.id].setAutoPlayDelayBetweenMoves(newVal);							
									}
								}
							}			
						},
						{
							fieldLabel: 'Animate Speed',
							name: 'animdelay',
							xtype: 'numberfield',
							id:'animdelay'+panel.id,
							width:30,
							value: chessObj[panel.id].animationSpeed,
							listeners: {
								change:function(node, newVal, oldVal){
									
									if (newVal != oldVal && newVal!=""){
									
											chessObj[panel.id].animationSpeed=newVal;
											
									}
								}
							}			
						},
						{
						xtype: 'combo',
						store: new Ext.data.SimpleStore({fields: ['set'],
							data: [['cases'],['cute'],['alphapale'],['leipzig'],['meridapale'],['motif'],['smart']]
						}),
		                fieldLabel: 'Chess Set',
		                displayField:'set',
		                mode: 'local',
						width:100,
		                triggerAction: 'all',
		                emptyText:'alphapale',
						listeners: {
							select: function(combo, record, index){
								chessObj[panel.id].setChessSet(record.data.set);
							}
						}
						
						
					},{
						xtype: 'combo',
						store: new Ext.data.SimpleStore({fields: ['id', 'board', 'color'],
							data: [['1','blue','4e7584'],['2','brown','93533a'],['3','yellow','d9b96a']]
						}),
		                fieldLabel: 'Board Color',
		                displayField:'board',
		                mode: 'local',
						width:100,
		                triggerAction: 'all',
		                emptyText:'blue',
						listeners: {
							select: function(combo, record, index){
								
								var DataID = '';
								if (record.data.id!='1')
								DataID = '-'+record.data.id
								chessObj[panel.id].bgImageLightSquares='images/light-square'+DataID+'.jpg';
								chessObj[panel.id].bgImageDarkSquares='images/dark-square'+DataID+'.jpg';
								chessObj[panel.id].showGame(0);
								document.getElementById('boardContainer'+panel.id).style.backgroundImage = 'url(images/board-monroi'+DataID+'.gif)';
								document.getElementById('boardContainer'+panel.id).style.color = "#"+record.data.color;
							}
						}
						
						
					}
					
					]
			    }
				]
			};
			var myWindow = new Ext.Window(window);
			nextWindow = new Ext.Window(window);
			myWindow.show();
			
			
			
        }
    },{
        id:'close',
        handler: function(e, target, panel){
			chessObj[panel.id].stopAutoPlay();
			chessObj[panel.id].__stopLiveUpdateHandler();
			chessObj[panel.id] = null;
            panel.ownerCt.remove(panel, true);
        }
    }];

var CookieProvider = new Ext.state.CookieProvider();
Ext.onReady(function(){

    Ext.state.Manager.setProvider(CookieProvider);
	var embedWin = new Ext.Window({ 
						title: 'Embed This Tournament!',
						width:510,
						height:195,
						stateful:false,
						resizable:false,
						listeners: {
									beforeclose: function(p){
										p.suspendEvents();
										p.hide();
									},
									activate: function(win){
						        		Ext.fly('embedBtn');
						        	},
						        	beforeshow: function(win){
						        		Ext.fly('embedBtn');
						        	}},
						items:[{
							xtype:'form',
							bodyStyle:'padding:5px 5px 0',
							id: 'embedform',
							height:120,
							frame:false,
							stateful:false,
							labelWidth:70,		
							autoScroll:false,
							defaultType: 'textarea',
							items: [{
								fieldLabel: 'Your Code',
								value: '<!-- Copy & Paste this code where you want the chess board to appear in your page\'s HTML Source.-->\n<iframe height="600" style="width: 990px;" src="http://www.monroi.com/watch/?tnm_id='+tnm_id+'">Your browser does not support inline frames or is currently configured not to display inline frames.</iframe>',
								width: 410,
								height:100
							}]
						},
						{
							xtype:'panel',
							layout:'anchor',
							title:'Example',
							html: '<a href="http://monroi.com/embedded/index2.php?tnm_id='+tnm_id+'" target="_BLANK">Click here to see an example</a>'
						}
						]
						
					});
	var AjaxChat = {
					
						title: 'MonRoi Chat',
						height:400,
						id: 'ajaxPanel',
						animateTarget: 'ajaxChatBtn',
						minimizable:true,
						width:600,
						stateful:true,
						defaultType: 'iframepanel',
						items: [{
							id:'AjaxChat',
							height:600,
							paddings:'10 5 0 0',
							defaultSrc: 'http://monroi.com/components/com_ajaxchat/index.php?userName='+CookieProvider.get('username','')+'&password='+CookieProvider.get('password','')+'&channelName='+tnm_name+'&lang=English'
						
						}],
						listeners: {
							resize: function(win,newWidth,newHeight){
								var myHeight = win.getInnerHeight();
								Ext.getCmp('AjaxChat').setHeight(myHeight);
							},
							minimize: function(win){
								
								win.hide();
								
							},
							close: function(win){
								ClosedBool = true;
								win.close();
							},
							show: function(){
								if (FirstShowBool){
								Ext.getCmp('AjaxChat').setSrc('http://monroi.com/components/com_ajaxchat/index.php?userName='+CookieProvider.get('username','')+'&password='+CookieProvider.get('password','')+'&channelName='+tnm_name+'&lang=English');
								FirstShowBool = false;
								}
							}
						}
					};


	AjaxCommentary = {
					
						title: 'MonRoi Commentary Session',
						height:505,
						id: 'commentarySession',
						animateTarget: 'commentaryList',
						minimizable:true,
						width:735,
						stateful:true,
						defaultType: 'iframepanel',
						items: [{
							id:'CommentaryPanel',
							height:400,
							paddings:'10 5 0 0',
							defaultSrc: 'http://monroi.com/watch/index.php?userName='+CookieProvider.get('username','')+'&password='+CookieProvider.get('password','')+'&tnm_id='+tnm_id
						
						}],
						listeners: {
							resize: function(win,newWidth,newHeight){
								var myHeight = win.getInnerHeight();
								Ext.getCmp('CommentaryPanel').setHeight(myHeight);
							},
							minimize: function(win){
								
								win.hide();
								
							},
							close: function(win){
								CClosedBool = true;
								win.close();
							},
							show: function(){
								if (FirstCShowBool){
								Ext.getCmp('CommentaryPanel').setSrc('http://monroi.com/watch/index.php?userName='+CookieProvider.get('username','')+'&password='+CookieProvider.get('password','')+'&tnm_id='+tnm_id);
								FirstCShowBool = false;
								}
							}
						}
					};
	AjaxRadio = {
					
						title: 'MonRoi Radio',
						height:505,
						id: 'radioSession',
						animateTarget: 'radioList',
						minimizable:true,
						width:735,
						stateful:true,
						defaultType: 'iframepanel',
						items: [{
							id:'RadioPanel',
							height:400,
							paddings:'10 5 0 0',
							defaultSrc: 'http://monroi.com/chess-radio.html?tmpl=component'
						
						}],
						listeners: {
							resize: function(win,newWidth,newHeight){
								var myHeight = win.getInnerHeight();
								Ext.getCmp('RadioPanel').setHeight(myHeight);
							},
							minimize: function(win){
								
								win.hide();
								
							},
							close: function(win){
								RClosedBool = true;
								win.close();
							},
							show: function(){
								if (FirstRShowBool){
								Ext.getCmp('RadioPanel').setSrc('http://monroi.com/chess-radio.html?tmpl=component');
								FirstRShowBool = false;
								}
							}
						}
					};


					
var BoardsSettings = new Ext.Window(
                     {
                        title: 'Settings',
						height:320,
						width:260,
						animateTarget: 'settingsBtn',
						stateful:false,
						listeners: {
							beforeclose: function(p){
								p.suspendEvents();
								p.hide();
							},
							activate: function(win){
				        		Ext.fly('settingsBtn');
				        	},
				        	beforeshow: function(win){
				        		Ext.fly('settingsBtn');
				        	}
							
						},
						items: [{
							title: 'Chess Board Properties',
							stateful:false,
							height:320,
							autoScroll:false,
							xtype:'form',               // Add a formPanel
					        defaultType: 'checkbox',
					        items:[{
										fieldLabel: 'Sound',
										name: 'Sound',
										checked: CookieProvider.get('sound',false),
										id: 'sound',
										listeners: {
											
											check:function(node, checked){
												for (var i=1;i<Lastid;i++){
												try{
													if (checked){
													
														chessObj[i].sound=true;
														chessObj[i].__addSoundEffects();
														chessObj[i].animate=true;
													
													}else{
														chessObj[i].sound=false;
													}
													CookieProvider.set('sound',checked);
												}catch (e){}
												}
											}
										
										}
									},
									{
										fieldLabel: 'Animate',
										name: 'Animate',
										id:'animate',
										checked: CookieProvider.get('animate',true),
										listeners: {
											check:function(node, checked){
												for (var i=1;i<Lastid;i++){
												try{
													chessObj[i].animate=checked;
													CookieProvider.set('animate',checked)
												}catch(e){}
												}
											}
										}			
									},
									{
										fieldLabel: 'Move Speed',
										name: 'delay',
										xtype: 'numberfield',
										id:'delay',
										width:30,
										value: CookieProvider.get('delay',0.4),
										listeners: {
											change:function(node, newVal, oldVal){
												for (var i=1;i<Lastid;i++){
												try{
												if (newVal != oldVal && newVal!=""){
													chessObj[i].setAutoPlayDelayBetweenMoves(newVal);
													CookieProvider.set('delay',newVal);												}
												}catch(e){}
												}
											}
										}			
									},
									{
										fieldLabel: 'Animate Speed',
										name: 'animdelay',
										xtype: 'numberfield',
										id:'animdelay',
										width:30,
										value: CookieProvider.get('animDelay',0.3),
										listeners: {
											change:function(node, newVal, oldVal){
												for (var i=1;i<Lastid;i++){
												try{
												if (newVal != oldVal && newVal!=""){
												
														chessObj[i].animationSpeed=newVal;
														CookieProvider.set('animDelay',newVal);
												}
												}catch (e) {}
												}
											}
										}			
									},
									{
										xtype: 'combo',
										store: new Ext.data.SimpleStore({fields: ['set'],
											data: [['cases'],['cute'],['alphapale'],['leipzig'],['meridapale'],['motif'],['smart']]
										}),
						                fieldLabel: 'Chess Set',
										displayField:'set',
						                mode: 'local',
										value: CookieProvider.get('chessSet','alphapale'),
						                triggerAction: 'all',
										width:90,
						                emptyText:'alphapale',
										listeners: {
											select: function(combo, record, index){
												for (var i=1;i<Lastid;i++){
												try{
													chessObj[i].setChessSet(record.data.set);
													CookieProvider.set('chessSet',record.data.set);
												}catch (e){}
												}
											}
										}
									
									
								},
								{
						xtype: 'combo',
						store: new Ext.data.SimpleStore({fields: ['id', 'board', 'color'],
							data: [['1','blue','4e7584'],['2','brown','93533a'],['3','yellow','d9b96a']]
						}),
		                fieldLabel: 'Board Color',
		                displayField:'board',
		                mode: 'local',
						width:100,
		                triggerAction: 'all',
						value: CookieProvider.get('boardName','blue'),
						listeners: {
							select: function(combo, record, index){
								for (var i=1;i<Lastid;i++){
								try{
								var DataID = '';
								if (record.data.id!='1')
								DataID = '-'+record.data.id
								chessObj[i].bgImageLightSquares='images/light-square'+DataID+'.jpg';
								chessObj[i].bgImageDarkSquares='images/dark-square'+DataID+'.jpg';
								chessObj[i].showGame(0);
								document.getElementById('boardContainer'+i).style.backgroundImage = 'url(images/board-monroi'+DataID+'.gif)';
								document.getElementById('boardContainer'+i).style.color = "#"+record.data.color;
								CookieProvider.set('boardColor',record.data.color)
								CookieProvider.set('boardID',record.data.id);
								CookieProvider.set('boardName',record.data.board);
								}
								catch(e){
								}
								}
								
							}
						}
						
						
					}
								
								]
						    }
							]
							
                    }
                );
    var viewport = new Ext.Viewport({
        layout:'border',
        items:[
		
		{
            region:'west',
            id:'west-panel',
            title:tnm_name,
            split:false,
            width: 200,
            collapsible: false,
            margins:'10 0 5 5',
            cmargins:'10 5 5 5',
            layout:'anchor',
			items: [{
			xtype: 'panel',
			html: '<center id="ext-gen209"><div style="opacity:0.7;border: 1px solid rgb(153, 187, 232);cursor:pointer; margin: 5px; height: 73px;" onclick="window.open(\'http://monroi.com/play/\');" onmouseover="this.style.opacity=\'1\';" onmouseout="this.style.opacity=\'0.7\';" id="ext-gen299"><img style="float: left;" src="../play/images/redcrown.png" id="ext-gen311"/><div style="font-size: 18px; color: rgb(68, 68, 68); float: right; position: relative; top: 30px; left: -8px;" id="ext-gen300">Play Chess</div></div><br/><div style="border: 1px solid rgb(153, 187, 232); margin: -10px 5px 5px;"><a style="" target="_BLANK" href="http://monroi.com/"><img height="486" width="160" src="images/monroi-side-banner-big.jpg" id="ext-gen222"/></a></div></center><br /><br />',
            autoScroll: false
			} ],
			layoutConfig:{
                animate:true
            }
        },{
		xtype:'tabpanel',
		activeTab: 0,
		enableTabScroll:true,
        defaults: {autoScroll:true},
		margins:'10 5 5 0',
		autoScroll:true,
		id: 'tab-portals',
		listeners: {
			close: function(tab,e){
				index = index-1;
			}
		},
		tbar: new Ext.Toolbar({
		id: 'tab-toolbar',
		items: [] }),
            
		region:'center',
		items: [{
			closable:true,
			title:'Page 1',
            xtype:'portal',
			
			region:'center',
			id:'mr-portal',
            margins:'0 5 5 0',
            items:[{
                columnWidth:.5,
                style:'padding:10px 0 10px 10px',
				id:'mr-portal-left'
				},{
                columnWidth:.5,
                style:'padding:10px',
				id: 'mr-portal-right'
            }]
        }
		
		
		
		]
		}]
		
	
    });
Ext.QuickTips.init();

// Apply a set of config properties to the singleton
Ext.apply(Ext.QuickTips.getQuickTip(), {
    maxWidth: 200,
    minWidth: 100,
    showDelay: 50,
    trackMouse: true
});
InitBoard(querySt("game_id"));

try{
		Ext.getCmp('tab-toolbar').add({text:'Add Page',tooltip:'Add a new tab.', iconCls:'new-tab',listeners:{click:function(node,e){addTab()}}});
		Ext.getCmp('tab-toolbar').addSeparator();

		
		Ext.getCmp('tab-toolbar').add(
		{
				id:'liveGamesList',
				text:'Live Games',
				menu: LiveGamesMenu
		});
		Ext.getCmp('tab-toolbar').addSeparator();

			
		Ext.getCmp('tab-toolbar').add(
		{
				id:'gamesList',
				text:'Replay Games',
				menu: GamesMenu
		});
		Ext.getCmp('tab-toolbar').addSeparator();
		Ext.getCmp('tab-toolbar').add(
		{
				id:'commentaryList',
				text:'Commentary',
				menu: new Ext.menu.Menu(commentaryMenu)
		
		});
		Ext.getCmp('tab-toolbar').addSeparator();
		Ext.getCmp('tab-toolbar').add({text:'Chat',tooltip:'Easily join and enjoy chess chat.',id:'ajaxChatBtn',
			listeners: {
				beforerender: function() {
					AjaxChatWin = new Ext.Window(AjaxChat);
				},
				click: function(){
					if (ClosedBool == true)
						AjaxChatWin = new Ext.Window(AjaxChat);

					AjaxChatWin.show();
				
			
			}
		
		}
		});

		Ext.getCmp('tab-toolbar').addSeparator();
		Ext.getCmp('tab-toolbar').add({text:'Live Audio',tooltip:'Listen to expert commentary on live events.',id:'radioBtn',
		listeners: {
				beforerender: function() {
					AjaxRadioWin = new Ext.Window(AjaxRadio);
				},
				click: function(){
					if (RClosedBool == true)
						AjaxRadioWin = new Ext.Window(AjaxRadio);

					AjaxRadioWin.show();
				
			
				}	
		
			}
		});

		Ext.getCmp('tab-toolbar').addSeparator();


		Ext.getCmp('tab-toolbar').add({text:'Embed',tooltip:'Embed this tournament viewer to your website!',id:'embedBtn',
			listeners: {
				click: function() {
					
					embedWin.show();
				
			
			}
		
		}
		});	

		
		
		
		Ext.getCmp('tab-toolbar').addSeparator();
		
		Ext.getCmp('tab-toolbar').add({text:'Settings',tooltip:'Edit default board settings.', id:'settingsBtn', listeners: { click: function(node,e){ BoardsSettings.show();
    

		}}});
		
	}catch (e){
			Ext.MessageBox.show({
			title: 'error',
			msg: e +'<br />',
			icon: Ext.MessageBox.ERROR
			});
	}

	
	Ext.Ajax.request({
		   url: 'http://monroi.com/index.php?option=com_monroi&task=isLoggedIn&tmpl=empty',
		   success: function(res,options){
		   try{
				if (res.responseText.match('false') || CookieProvider.get('username',0) == 0 || CookieProvider.get('password',0) == 0)
				{
					var myWindow = new Ext.Window({
						title:'Login',
						width:210,
						height:140,
						resizable:false,
						closable:false,
						modal:true,
						stateful:false,
						items: [{
								xtype:'form',
								bodyStyle:'padding:5px 5px 0',
								id: 'loginform',
								frame:true,
								width:200,
								height:110,
								stateful:false,
						        defaults: {width: 100},
								labelWidth:70,
								defaultType:'textfield',
								items: [
									{
										fieldLabel: 'Username',
										id:'user',
										name:'username'
									},
									{
										fieldLabel: 'Password',
										id:'pass',
										inputType:'password',
										name:'passwd'
									},
									{	name:'task',value:'login', xtype:'hidden' },
									{	name:'option',value:'com_monroi', xtype:'hidden' },
									{	name:'tmpl',value:'empty', xtype:'hidden'	}
								],
								buttons: [
								{
									text: 'Login', 
									type:'submit',
									handler: function() {
									Ext.getCmp('loginform').form.submit({
										url: 'http://monroi.com/index.php',
										
										success: function() {
												CookieProvider.set('username',document.getElementById('user').value);
																																		CookieProvider.set('password',MD5(document.getElementById('pass').value));

												Ext.Msg.alert('Access Granted', 'Welcome to MonRoi Chess Viewer.'); 
												myWindow.close();
											
										},
										failure: function() {
											Ext.Msg.alert('Login Failed', 'Invalid Username or Password.');
										}
									});				
									}
								},
									{
									text: 'Register', 
									handler:
										function(btn,e){ 
											window.location = 'http://monroi.com/component/comprofiler/?task=registers'; 
										}
									}]
							
							}]
					
					});
					myWindow.show();
				}
				else 
				{
					
				}
			} catch(e) {
				Ext.Msg.alert('Error', e);
			}
		   },
		   failure: function(res,options){
				Ext.Msg.alert('Error', res.responseText);
		   }
		});
	
if(game_id != ''){
	Ext.getCmp(Ext.getCmp('tab-portals').getActiveTab().id + '-left').add(new Ext.Panel({
					draggable:true,
					collapsible:true,
					id: Lastid,
					stateful:false,
					title: '<span id="ext-pane-'+game_id+'"></span>',
					tools: tools,
					html: PrintBoard(),
					style:'margin:0px 0 10px 0px'
				}));
	Ext.getCmp(Ext.getCmp('tab-portals').getActiveTab().id + '-left').doLayout();
	InitBoard(game_id, live);
		Ext.Ajax.request({
			   url: 'getJSONGameInfo.php',
			   success: function(result, request) {
				try { var res = Ext.util.JSON.decode(result.responseText);
					if (res.section != '')
						var mySection = res.section + '-';
					else
						var mySection = '';
				document.getElementById('ext-pane-'+game_id).innerHTML= 'R' + res.round_num + '-' + mySection + 'B' + res.board + ': <span name="noname" id="whitePlayer'+game_id+'" style="display:inline;" ext:qtip="Rating: ' + res.wrt +'<br /><br /><img src=\'http://monroi.com/wdc/player_photo/' + res.wph + '\' title=\'Player 1 Photo\' /><br /><br />" ext:qtipTitle="Player Details">'+ res.wc + res.wln + ', ' + res.wfn + '</span> vs. <span name="noname" id="blackPlayer'+game_id+'" style="display:inline;" ext:qtip="Rating: '+ res.brt + '<br /><br /><img src=\'http://monroi.com/wdc/player_photo/' + res.bph + '\' title=\'Player 2 Photo\' /><br /><br />" ext:qtipTitle="Player Details">'+ res.bc + res.bln + ', ' + res.bfn + '</span> <span id="activeResult'+ game_id +'">' + res.result + '</span>'; 
			   }catch (e) { Ext.MessageBox.alert('Error', 'error: ' + result.responseText);}
			   },
			   params: { game_id: game_id }
	});
}	
});
var AjaxCommentaryWin = null;
var AjaxChatWin = null;
var AjaxRadioWin = null;
var ClosedBool = false;
var FirstShowBool = true;
var CClosedBool = false;
var FirstCShowBool = true;
var RClosedBool = false;
var FirstRShowBool = true;
var Embed = function(BoardID) {
	
	new Ext.Window({ 
		title: 'Embed This Game!',
		width:510,
		height:195,
		stateful:false,
		resizable:false,
		items:[{
			xtype:'form',
			bodyStyle:'padding:5px 5px 0',
			id: 'loginform',
			height:120,
			frame:false,
			stateful:false,
			labelWidth:70,		
			autoScroll:false,
			defaultType: 'textarea',
			items: [{
				fieldLabel: 'Your Code',
				value: '<!-- Copy & Paste this code where you want the chess board to appear in your page\'s HTML Source.-->\n<iframe src="http://monroi.com/watch/embed.php?game_id='+chessObj[BoardID].getPgnFile()+'" width="405" height="490" border=0 scrolling=no style="border:0px solid #000;"></iframe>',
				width: 410,
				height:100
			}]
		},
		{
			xtype:'panel',
			layout:'anchor',
			title:'Example',
			html: '<a href="http://monroi.com/embedded/index.php?game_id='+chessObj[BoardID].getPgnFile()+'" target="_BLANK">Click here to see an example</a>'
		}
		]
		
	}).show();

}
var BrilliantVote = function(BoardID) {Ext.Ajax.request( {
	url: 'http://monroi.com/watch/setVote.php?game_id='+chessObj[BoardID].getPgnFile()+'&tnm_id='+tnm_id+'&user='+CookieProvider.get('username','')+'&hash='+CookieProvider.get('password',''),
	success: function(result, request) {
				try {
					var myResult = result.responseText.split("|");
					if (myResult[1] != null)
						Ext.Msg.alert('Thank You', 'Thank You for Voting!<br />This game now has '+myResult[1]+' vote(s)' +'.');
					else
						Ext.Msg.alert('Vote Failed', result.responseText);
				}
				
				catch(e){
				Ext.Msg.alert('Error',e + ' || ' + result.responseText);
				}
			}
	

});
}
var MD5 = function (string) {

    function RotateLeft(lValue, iShiftBits) {
        return (lValue<<iShiftBits) | (lValue>>>(32-iShiftBits));
    }

    function AddUnsigned(lX,lY) {
        var lX4,lY4,lX8,lY8,lResult;
        lX8 = (lX & 0x80000000);
        lY8 = (lY & 0x80000000);
        lX4 = (lX & 0x40000000);
        lY4 = (lY & 0x40000000);
        lResult = (lX & 0x3FFFFFFF)+(lY & 0x3FFFFFFF);
        if (lX4 & lY4) {
            return (lResult ^ 0x80000000 ^ lX8 ^ lY8);
        }
        if (lX4 | lY4) {
            if (lResult & 0x40000000) {
                return (lResult ^ 0xC0000000 ^ lX8 ^ lY8);
            } else {
                return (lResult ^ 0x40000000 ^ lX8 ^ lY8);
            }
        } else {
            return (lResult ^ lX8 ^ lY8);
        }
     }

     function F(x,y,z) { return (x & y) | ((~x) & z); }
     function G(x,y,z) { return (x & z) | (y & (~z)); }
     function H(x,y,z) { return (x ^ y ^ z); }
    function I(x,y,z) { return (y ^ (x | (~z))); }

    function FF(a,b,c,d,x,s,ac) {
        a = AddUnsigned(a, AddUnsigned(AddUnsigned(F(b, c, d), x), ac));
        return AddUnsigned(RotateLeft(a, s), b);
    };

    function GG(a,b,c,d,x,s,ac) {
        a = AddUnsigned(a, AddUnsigned(AddUnsigned(G(b, c, d), x), ac));
        return AddUnsigned(RotateLeft(a, s), b);
    };

    function HH(a,b,c,d,x,s,ac) {
        a = AddUnsigned(a, AddUnsigned(AddUnsigned(H(b, c, d), x), ac));
        return AddUnsigned(RotateLeft(a, s), b);
    };

    function II(a,b,c,d,x,s,ac) {
        a = AddUnsigned(a, AddUnsigned(AddUnsigned(I(b, c, d), x), ac));
        return AddUnsigned(RotateLeft(a, s), b);
    };

    function ConvertToWordArray(string) {
        var lWordCount;
        var lMessageLength = string.length;
        var lNumberOfWords_temp1=lMessageLength + 8;
        var lNumberOfWords_temp2=(lNumberOfWords_temp1-(lNumberOfWords_temp1 % 64))/64;
        var lNumberOfWords = (lNumberOfWords_temp2+1)*16;
        var lWordArray=Array(lNumberOfWords-1);
        var lBytePosition = 0;
        var lByteCount = 0;
        while ( lByteCount < lMessageLength ) {
            lWordCount = (lByteCount-(lByteCount % 4))/4;
            lBytePosition = (lByteCount % 4)*8;
            lWordArray[lWordCount] = (lWordArray[lWordCount] | (string.charCodeAt(lByteCount)<<lBytePosition));
            lByteCount++;
        }
        lWordCount = (lByteCount-(lByteCount % 4))/4;
        lBytePosition = (lByteCount % 4)*8;
        lWordArray[lWordCount] = lWordArray[lWordCount] | (0x80<<lBytePosition);
        lWordArray[lNumberOfWords-2] = lMessageLength<<3;
        lWordArray[lNumberOfWords-1] = lMessageLength>>>29;
        return lWordArray;
    };

    function WordToHex(lValue) {
        var WordToHexValue="",WordToHexValue_temp="",lByte,lCount;
        for (lCount = 0;lCount<=3;lCount++) {
            lByte = (lValue>>>(lCount*8)) & 255;
            WordToHexValue_temp = "0" + lByte.toString(16);
            WordToHexValue = WordToHexValue + WordToHexValue_temp.substr(WordToHexValue_temp.length-2,2);
        }
        return WordToHexValue;
    };

    function Utf8Encode(string) {
        string = string.replace(/\r\n/g,"\n");
        var utftext = "";

        for (var n = 0; n < string.length; n++) {

            var c = string.charCodeAt(n);

            if (c < 128) {
                utftext += String.fromCharCode(c);
            }
            else if((c > 127) && (c < 2048)) {
                utftext += String.fromCharCode((c >> 6) | 192);
                utftext += String.fromCharCode((c & 63) | 128);
            }
            else {
                utftext += String.fromCharCode((c >> 12) | 224);
                utftext += String.fromCharCode(((c >> 6) & 63) | 128);
                utftext += String.fromCharCode((c & 63) | 128);
            }

        }

        return utftext;
    };

    var x=Array();
    var k,AA,BB,CC,DD,a,b,c,d;
    var S11=7, S12=12, S13=17, S14=22;
    var S21=5, S22=9 , S23=14, S24=20;
    var S31=4, S32=11, S33=16, S34=23;
    var S41=6, S42=10, S43=15, S44=21;

    string = Utf8Encode(string);

    x = ConvertToWordArray(string);

    a = 0x67452301; b = 0xEFCDAB89; c = 0x98BADCFE; d = 0x10325476;

    for (k=0;k<x.length;k+=16) {
        AA=a; BB=b; CC=c; DD=d;
        a=FF(a,b,c,d,x[k+0], S11,0xD76AA478);
        d=FF(d,a,b,c,x[k+1], S12,0xE8C7B756);
        c=FF(c,d,a,b,x[k+2], S13,0x242070DB);
        b=FF(b,c,d,a,x[k+3], S14,0xC1BDCEEE);
        a=FF(a,b,c,d,x[k+4], S11,0xF57C0FAF);
        d=FF(d,a,b,c,x[k+5], S12,0x4787C62A);
        c=FF(c,d,a,b,x[k+6], S13,0xA8304613);
        b=FF(b,c,d,a,x[k+7], S14,0xFD469501);
        a=FF(a,b,c,d,x[k+8], S11,0x698098D8);
        d=FF(d,a,b,c,x[k+9], S12,0x8B44F7AF);
        c=FF(c,d,a,b,x[k+10],S13,0xFFFF5BB1);
        b=FF(b,c,d,a,x[k+11],S14,0x895CD7BE);
        a=FF(a,b,c,d,x[k+12],S11,0x6B901122);
        d=FF(d,a,b,c,x[k+13],S12,0xFD987193);
        c=FF(c,d,a,b,x[k+14],S13,0xA679438E);
        b=FF(b,c,d,a,x[k+15],S14,0x49B40821);
        a=GG(a,b,c,d,x[k+1], S21,0xF61E2562);
        d=GG(d,a,b,c,x[k+6], S22,0xC040B340);
        c=GG(c,d,a,b,x[k+11],S23,0x265E5A51);
        b=GG(b,c,d,a,x[k+0], S24,0xE9B6C7AA);
        a=GG(a,b,c,d,x[k+5], S21,0xD62F105D);
        d=GG(d,a,b,c,x[k+10],S22,0x2441453);
        c=GG(c,d,a,b,x[k+15],S23,0xD8A1E681);
        b=GG(b,c,d,a,x[k+4], S24,0xE7D3FBC8);
        a=GG(a,b,c,d,x[k+9], S21,0x21E1CDE6);
        d=GG(d,a,b,c,x[k+14],S22,0xC33707D6);
        c=GG(c,d,a,b,x[k+3], S23,0xF4D50D87);
        b=GG(b,c,d,a,x[k+8], S24,0x455A14ED);
        a=GG(a,b,c,d,x[k+13],S21,0xA9E3E905);
        d=GG(d,a,b,c,x[k+2], S22,0xFCEFA3F8);
        c=GG(c,d,a,b,x[k+7], S23,0x676F02D9);
        b=GG(b,c,d,a,x[k+12],S24,0x8D2A4C8A);
        a=HH(a,b,c,d,x[k+5], S31,0xFFFA3942);
        d=HH(d,a,b,c,x[k+8], S32,0x8771F681);
        c=HH(c,d,a,b,x[k+11],S33,0x6D9D6122);
        b=HH(b,c,d,a,x[k+14],S34,0xFDE5380C);
        a=HH(a,b,c,d,x[k+1], S31,0xA4BEEA44);
        d=HH(d,a,b,c,x[k+4], S32,0x4BDECFA9);
        c=HH(c,d,a,b,x[k+7], S33,0xF6BB4B60);
        b=HH(b,c,d,a,x[k+10],S34,0xBEBFBC70);
        a=HH(a,b,c,d,x[k+13],S31,0x289B7EC6);
        d=HH(d,a,b,c,x[k+0], S32,0xEAA127FA);
        c=HH(c,d,a,b,x[k+3], S33,0xD4EF3085);
        b=HH(b,c,d,a,x[k+6], S34,0x4881D05);
        a=HH(a,b,c,d,x[k+9], S31,0xD9D4D039);
        d=HH(d,a,b,c,x[k+12],S32,0xE6DB99E5);
        c=HH(c,d,a,b,x[k+15],S33,0x1FA27CF8);
        b=HH(b,c,d,a,x[k+2], S34,0xC4AC5665);
        a=II(a,b,c,d,x[k+0], S41,0xF4292244);
        d=II(d,a,b,c,x[k+7], S42,0x432AFF97);
        c=II(c,d,a,b,x[k+14],S43,0xAB9423A7);
        b=II(b,c,d,a,x[k+5], S44,0xFC93A039);
        a=II(a,b,c,d,x[k+12],S41,0x655B59C3);
        d=II(d,a,b,c,x[k+3], S42,0x8F0CCC92);
        c=II(c,d,a,b,x[k+10],S43,0xFFEFF47D);
        b=II(b,c,d,a,x[k+1], S44,0x85845DD1);
        a=II(a,b,c,d,x[k+8], S41,0x6FA87E4F);
        d=II(d,a,b,c,x[k+15],S42,0xFE2CE6E0);
        c=II(c,d,a,b,x[k+6], S43,0xA3014314);
        b=II(b,c,d,a,x[k+13],S44,0x4E0811A1);
        a=II(a,b,c,d,x[k+4], S41,0xF7537E82);
        d=II(d,a,b,c,x[k+11],S42,0xBD3AF235);
        c=II(c,d,a,b,x[k+2], S43,0x2AD7D2BB);
        b=II(b,c,d,a,x[k+9], S44,0xEB86D391);
        a=AddUnsigned(a,AA);
        b=AddUnsigned(b,BB);
        c=AddUnsigned(c,CC);
        d=AddUnsigned(d,DD);
    }

    var temp = WordToHex(a)+WordToHex(b)+WordToHex(c)+WordToHex(d);

    return temp.toLowerCase();
}


function pausecomp(millis)
{
var date = new Date();
var curDate = null;

do { curDate = new Date(); }
while(curDate-date < millis);
} 
