var CInterface = Class.create();
var sPeriodicallyWindowCloseButton = 'test';

CInterface.prototype = Object.extend( (new CCnfDialog('logout-container')), {
	initialize: function(config)
	{
		this.options = config;
		this.signInContainer = '';
		this.signUpContainer = '';
		this.backButtonTimer = false;
		this.hideButtonTimeOut = 2500;
		this.hideDetailsTimeOut = 2000;
		this.charityFormRequest = null;
		this.timer = false;
		this.alreadyRequestedAlerts = false;
		this.currentHotPoint = null;
		// this.notificationOnce = Utils.getCookie('notification_once');
		this.TIMER_PERIODICALLY = null;

		var selCharity = Utils.getCookie('selcharity');
		if (selCharity != null)
		{
		    
			this.hideCnf();
			// this.killperiodicallyDisplay();
			this.periodicallyDisplayStart();
		}
	},

	init: function()
	{
		this.initHomePage();
		this.initUserBar();
	    this.resizeHomepageLayout();
		this.initForms();
		this.initBackButton();
	},
	
	initForms: function()
	{
		$$(this.options['searchFieldSelector']).each(function(el) {
            el.focus(); 
        });
		
		this.initCarityForm();
	},
	
	initCarityForm: function()
	{
		$$(this.options['charityFormSelector']).each(function(el) {
            el.onsubmit = function() { return false; }
            Event.observe(el, "submit", this.submitCharityForm.bindAsEventListener(this) );
			
			var submits = el.getInputs('submit');
			submits.each(function(v) {
				v.onclick = function() { 
				    if (v.alt)
					{
						this.clearCharityConfirmation(v);
						return false;
					}
					return true;
				}.bind(this);
			}.bind(this)); 
        }.bind(this));
	},
	
	clearCharityConfirmation: function(el)
	{
		var XY = this._calcCenterViewportPosition();
		this.okButtonTitle = this.okClearCharityButtonTitle; 
		this.initCnfButtons();
        this.displayDialog ( el, XY[0]-150, XY[1], {
			'title':el.alt,
			'rel':'confirm',
			'ok':this.OkClearCnf.bind(this)
		} );
        return false;
	},
	
	_calcCenterViewportPosition: function()
    {
        var W = Utils.getViewportWidth();
        var H = (Utils.getViewportHeight()/2) + Utils.docScrollTop();
        return [W/2,H];
    },
	
	OkClearCnf: function()
    {
		var f = $('ch_form');
		if (f)
		{
			Utils.setLoadingEffect($(this.options['VerifyCharityContainer']).down('div.Inner'), 'VerifyCharityContainer_loading', 'charityFormLoadingCSS');
	        this.charityFormRequest = f.request({
	            'onComplete':this.successFormLoading.bind(this)
	        });
			this.hideCnf();
		}
        return false;
    },
	
	submitCharityForm: function(evt)
	{
		if (this.charityFormRequest) return;
		
		if (Object.isElement(evt))
		{
			var f = evt;
		}
		else
		{
			if ( suggestion )
            {
				suggestion.hideSuggestions();
            }
            
            var f = Event.findElement(evt, 'form');
		}
        
		var valueExists = false;
		var inputs = f.getInputs('text');
		inputs.each(function(v){
			if (v.getValue())
			{
				valueExists = true;
			}
		});
		
		if (valueExists && $(this.options['VerifyCharityContainer']) )
		{
			Utils.setLoadingEffect($(this.options['VerifyCharityContainer']).down('div.Inner'), 'VerifyCharityContainer_loading', 'charityFormLoadingCSS');
            this.charityFormRequest = f.request({
                'onComplete':this.successFormLoading.bind(this)
            });
		}
			
		return false;
	},
	
	successFormLoading: function(response)
	{
	    
		if ( $(this.options['VerifyCharityContainer']) )
		{
			$(this.options['VerifyCharityContainer']).update(response.responseText);
			this.initCarityForm();
			initializeWindow('AdvCharityOptions');
			suggestion.init();
	        suggestion.hideSuggestions();
	        
	        
			if( typeof sPeriodicallyWindowCloseButton != 'undefined' )
			{
				if( $('desel_charity_id') )
				{
					this.periodicallyDisplayStart();
				} 
				else
				{
					this.killperiodicallyDisplay();
				}
			}
			
			var selInPopup = $(interfaceObj.options['charityFieldSelectedInPopup']);
            if (selInPopup)
            {
                selInPopup.setValue('');
            }
			this.currentHotPoint = this.findVisibleHotPoint();
			if (this.currentHotPoint)
			{
				if ($(this.options['charityFieldId']))
                {
                    this.currentHotPoint.setStyle({
                        'display':'block'
                    });
                }
				else
				{
					this.currentHotPoint.setStyle({
                        'display':'none'
                    });
				}
			}
		}
		
		Utils.removeLoadingEffect($('VerifyCharityContainer_loading'));
		this.charityFormRequest = null;
	},
	
	initUserBar: function()
	{
		$$(this.options['logoutSelector']).each(function(el) { el.onclick = function() { return false }; } )
        $$(this.options['logoutSelector']).invoke('observe', 'click', this.logoutWindowDisplay.bindAsEventListener(this) );
		
		$$(this.options['loginSelector']).each(function(el) { el.onclick = function() { return false }; } )
        $$(this.options['loginSelector']).invoke('observe', 'click', this.loginWindowDisplay.bindAsEventListener(this) );
		
		$$(this.options['signupSelector']).each(function(el) { el.onclick = function() { return false }; } )
        $$(this.options['signupSelector']).invoke('observe', 'click', this.signupWindowDisplay.bindAsEventListener(this) );
	},
	
	initHomePage: function()
	{
		$$(this.options['makeHomeSelector']).each(function(el) { el.onclick = function() { return false }; } )
		$$(this.options['makeHomeSelector']).invoke('observe', 'click', this.makeHomePage.bindAsEventListener(this) );

		$$(this.options['addSearchEngine']).each(function(el) { el.onclick = function() { return false }; } )
		$$(this.options['addSearchEngine']).invoke('observe', 'click', this.addSearchEngine.bindAsEventListener(this) );

		this.getStartedBlock();
	},
    
	/*
	 * get started block
	 */
	getStartedBlock: function()
	{
		var mainScheme = $('mainScheme');
		if ( mainScheme )
		{
			var links = mainScheme.getElementsBySelector('a[rel]');
			links.each(function(el) { el.onclick = function() { return false }; } )
            links.invoke('observe', 'click', this.showNextStep.bindAsEventListener(this) );
		} 
		
		var HopPoints = $$(this.options['HopPointsSelector']);
		HopPoints.invoke('observe', 'mouseover', this.showBackButton.bindAsEventListener(this) );
        HopPoints.invoke('observe', 'mouseout', this.hideButtonTimerSet.bindAsEventListener(this) );
	},
	
	showNextStep: function(evt)
	{
		var el = Event.findElement(evt, 'a');
		if (el && el.rel)
		{
			$('mainScheme').setStyle({
				'display':'none'
			});
			$(el.rel).setStyle({
                'display':'block'
            });
		}
		this.showBackButton();
		this.centerBackButton();
	},
	
	showPrevStep: function(evt)
    {
        var el = Event.findElement(evt, 'a');
        if (el && el.rel)
        {
            $('mainScheme').setStyle({
                'display':'block'
            });
            $(el.rel).setStyle({
                'display':'none'
            });
        }
    },
	 
	/*
	 * 
	 */
	
	hideInfo: function()
    {
        this.hideCnf();
    },

    loginWindowDisplay: function(evt)
	{
		var el = Event.findElement(evt,'a');
		if ($('signInContainer'))
		{
			if (!this.signInContainer)
			{
				this.signInContainer = $('signInContainer').innerHTML;
			}
			if (this.okSignInButtonTitle)
			{
				this.okButtonTitle = this.okSignInButtonTitle;
				this.initCnfButtons();
			}
			
			var X = (Utils.getLeftPos(el)-250);
            var Y = (Utils.getTopPos(el)+30);
            if (this.signInContainer)
            {
                this.displayDialog ( el, X, Y, {'title':this.signInContainer,'ok':this.submitSignIn.bind(this),'rel':'signin'} );
                $('signInContainer').update('');
            }
		}
        return false;
	},

	periodicallyDisplayStart: function()
	{
		var notificationOnce = Utils.getCookie('notification_once');

		if(notificationOnce == 1)
		{
			Utils.setCookie('notification_once', 'off', false, '/');
			this.TIMER_PERIODICALLY = setInterval('interfaceObj.periodicallyDisplay()', 60000);
		}
		else if(notificationOnce == 0)
		{
			this.TIMER_PERIODICALLY = setInterval('interfaceObj.periodicallyDisplay()', 60000);
		}
	},

	periodicallyDisplay: function( )
	{
		var buttonName = sPeriodicallyWindowCloseButton;
		var el = $('signup_block');
		
		this.okButtonTitle = buttonName;
		this.initCnfButtons();
		
		var X = (Utils.getLeftPos(el)-250);
        var Y = (Utils.getTopPos(el)+30);
            
        this.displayDialog ( el, X, Y, {'title':$('periodicallyContainer').innerHTML,'ok':this.closeperiodicallyWindow.bind(this),'rel':'alert'} );
        
        return false;
	},
	
	closeperiodicallyWindow: function(objEl)
	{
		this.hideCnf();
		this.killperiodicallyDisplay();
		var notificationOnce = Utils.getCookie('notification_once');
		if(notificationOnce == 0)
	    {
			this.periodicallyDisplayStart();
	    }
		return false;		
	},
	
	killperiodicallyDisplay: function()
	{
	    if (this.TIMER_PERIODICALLY)
	    {
		  clearInterval(this.TIMER_PERIODICALLY);
	    }
	},
	
	signupWindowDisplay: function(evt)
	{
		if ($('signUpContainer'))
		{
			this.killperiodicallyDisplay();
			if (!this.signUpContainer)
            {
                this.signUpContainer = $('signUpContainer').innerHTML;
            }
            var el = Event.findElement(evt,'a');
            var X = (Utils.getLeftPos(el)-250);
            var Y = (Utils.getTopPos(el)+30);
			if (this.signUpContainer)
			{
				this.displayDialog ( el, X, Y, {'title':this.signUpContainer,'ok':this.okClose.bind(this)} );
				$('signUpContainer').update('');
			}
		}
        return false;
	},
	
	okClose: function()
	{
		this.hideCnf();
		this.periodicallyDisplayStart();
        return false;
	},
	
    logoutWindowDisplay: function(evt)
    {
		
        var el = Event.findElement(evt,'a');
        var X = (Utils.getLeftPos(el)-250);
        var Y = (Utils.getTopPos(el)+30);
        this.displayDialog ( el, X, Y );
        return false;
    },

    submitSignIn: function()
	{
		var signinForm = $('signinForm');
        if ( signinForm )
        {
			signinForm.submit();
        }
        return false;
	},
	
    OkCnf: function()
    {
        var logoutForm = this.cnfElement.up('form#unauth');
        if ( logoutForm )
        {
            logoutForm.submit();
        }
        return false;
    },
	
    makeHomePage: function(evt)
    {
        var el = Event.findElement(evt,'a');
		
		if (el)
		{
			el.style.behavior='url(#default#homepage)';
			if(Prototype.Browser.IE){
				el.setHomePage(el.href);
			} else if(Prototype.Browser.Gecko ){
				window.sidebar.addPanel(el.title,el.href,'' );
			}
		}
		
		return false;
    },

    addSearchEngine: function(evt)
    {
    	// Get and save the navigator object:
    	var nav = navigator;
    
    	// Determine the name of the browser:
    	var browserName = nav.appName;
    
    	var isNN = ( browserName == "Netscape" );
    	var isIE = ( browserName == "Microsoft Internet Explorer" );
    
    	// Determine the version of the browser:
    	var browserVersion = nav.appVersion;
    	var appVer = parseFloat( browserVersion );
    
    	// Bug fix for IE 4 and above:
    	if (isIE && appVer >= 4)
    	{
    		var regexp = /MSIE ([0-9.]+)/;
    
    		if (regexp.exec(browserVersion))
    		{
    			var ver = parseFloat(RegExp.$1);
    
    			if (ver > appVer)
    			{
    				appVer = ver;
    			}
    		}
    	}
    
    	// Bug fix for NN 6 and above:
    	if (isNN && appVer >= 5)
    	{
    		var regexp = /Netscape\d?\/([0-9.]+)/;
    
    		if (regexp.exec(nav.userAgent))
    		{
    			var ver = parseFloat(RegExp.$1);
    
    			if (ver > appVer)
    			{
    				appVer = ver;
    			}
    		}
    	}
    
    	if (isNN || (isIE && appVer > 6))
    	{
    		window.external.AddSearchProvider('http://mokoseek.com/plugins/searchbar.xml');
    	}
    	else
    	{
    		alert('Sorry!!! You have an unsupported browser type.\nThis option is available only in MS Internet Explorer v.7 and above or Mozilla Firefox 2 and above.');
    	}
    },

	resizeHomepageLayout: function()
	{
		var contentEl = $$(this.options['contentAreaSelector']);
		if(contentEl && contentEl[0])
		{
			var w = 0;
			contentEl = contentEl[0];
			if (Utils.getViewportWidth()<this.options['homePage'].minWidth)
			{
				w = this.options['homePage'].minWidth+1;
			}
			else if (Utils.getViewportWidth()>this.options['homePage'].maxWidth)
			{
				w = this.options['homePage'].maxWidth-1;
			}
			
			if (w)
			{
				contentEl.setStyle({
	                'width':w+'px'
	            });
			}
			else
			{
				contentEl.setStyle({
                    'width':'92%'
                });
			}
		}
		
		//if (!Prototype.Browser.IE)
        {
            var actions = $$(this.options['actionsSelector']);
            if (actions && actions[0])
            {
                var clientW = (document.documentElement.clientWidth/2);
				var panelW = actions[0].getWidth()/2;
				
				actions[0].setStyle({
					'left':(clientW-panelW)+'px'
				});
            }
        }
		this.centerBackButton();
	},
	
	/*
	 * back button
	 */
	centerBackButton: function()
	{
		var actions = $$(this.options['backButton']);
        actions.each(function(v) {
			var clientW = (document.documentElement.clientWidth/2);
            var panelW = v.getWidth()/2;
            
            v.setStyle({
                'left':(clientW-panelW)+'px'
            });
		});
	},
	
	initBackButton: function()
	{
		var links = $$(this.options['backButton']);
        links.each(function(el) { el.onclick = function() { return false }; } )
        links.invoke('observe', 'click', this.showPrevStep.bindAsEventListener(this) );
		links.invoke('observe', 'mouseover', this.hideButtonTimerReset.bindAsEventListener(this) );
        links.invoke('observe', 'mouseout', this.hideButtonTimerSet.bindAsEventListener(this) );
	},
	
	/*
    * Sets timeout
    */
    hideButtonTimerSet: function()
    {
        if (this.backButtonTimer) clearTimeout(this.backButtonTimer);
        this.backButtonTimer = setTimeout(this.hideBackButton.bind(this), this.hideButtonTimeOut);
    },

    /*
    * Resets timeout
    */
    hideButtonTimerReset: function()
    {
        if (this.backButtonTimer) clearTimeout(this.backButtonTimer);
    },
	
	hideBackButton: function()
	{
		var links = $$(this.options['backButton']);
        links.each(function(el) {
			el.setStyle({
				'display':'none'
			}); 
		} );
		this.backButtonTimer = false;
	},
	
	showBackButton: function()
    {
        var links = $$(this.options['backButton']);
        links.each(function(el) {
            el.setStyle({
                'display':'block'
            }); 
        } );
        this.hideButtonTimerSet();
    },
	
	/*
	 * 
	 */
	detailsLayerPosition: function(el)
    {
        var commentBlock = $(this.options['alertsBlock']);
        if (commentBlock) 
        {
            commentBlock.setStyle({
                'display': 'block'
            });
            
            var top = Utils.getTopPos(el) + 20;
            var left = Utils.getLeftPos(el);
            
            
            commentBlock.setStyle({
                'visibility': 'visible',
                'left': left + 'px',
                'top': top + 'px'
            });
            
        }
    },
	
	initAlertsLink: function()
	{
		var links = $$(this.options['alertsSelector']);
		links.each(function(el) { el.onclick = function() { return false }; } );
        links.invoke('observe', 'click', this.showAlertsContainer.bindAsEventListener(this) );
		links.invoke('observe', 'mouseover', this.hideDetailsTimerReset.bindAsEventListener(this) );
        links.invoke('observe', 'mouseout', this.hideDetailsTimerSet.bindAsEventListener(this) );
		
		var commentBlock = $(this.options['alertsBlock']);
        if (commentBlock)
        {
            var links = commentBlock.getElementsBySelector('a[rel="close"]');
            links.each(function(el) { el.onclick = function() { return false }; } )
            links.invoke('observe', 'click', this.hideDetailsDescription.bindAsEventListener(this) );
        }
	},
	
	showAlertsContainer: function(evt)
	{
		var el = Event.findElement(evt, 'a');
        if (el)
        {
			if (this.alreadyRequestedAlerts)
			{
				this.detailsLayerPosition(el);
			}
			else
			{
                this.detailsLayerPosition(el);
                Utils.setLoadingEffect($(this.options['alertsBlock']), 'winContainer_loading', 'transparentLoadingCSS');
                this.request = new Ajax.Request(el.href, {
                    'onSuccess':this.successDetailsLoading.bind(this)
                });
                this.hideDetailsTimerReset();
			}
		}
        return false;
	},
	
	successDetailsLoading: function(response)
    {
        var commentBlock = $(this.options['alertsBlock']);
        if (commentBlock)
        {
            var blockContent = commentBlock.down('div.block-content');
            if (blockContent)
            {
                blockContent.update(response.responseText);
            }
            Event.observe(commentBlock, 'mouseover', this.hideDetailsTimerReset.bindAsEventListener(this) );
            Event.observe(commentBlock, 'mouseout', this.hideDetailsTimerSet.bindAsEventListener(this) );
			this.alreadyRequestedAlerts = true;
        }
        Utils.removeLoadingEffect($('winContainer_loading'));
        this.request = null;
    },
    
    hideDetailsDescription: function()
    {
        var commentBlock = $(this.options['alertsBlock']);
        if (commentBlock)
        {
            commentBlock.setStyle({
                'display':'none'
            });
            if (this.timer) clearTimeout(this.timer);
			Utils.removeLoadingEffect($('winContainer_loading'));
        }
        return false;
    },
    
    hideDetailsTimerSet: function()
    {
        if (this.timer) clearTimeout(this.timer);
        this.timer = setTimeout(this.hideDetailsDescription.bind(this), this.hideDetailsTimeOut);
    },

    hideDetailsTimerReset: function()
    {
        if (this.timer) clearTimeout(this.timer);
    },
	
	findVisibleHotPoint: function()
	{
		var point = this.currentHotPoint;
		var points = $$(this.options['HopPointsSelector']);
        points.each(function(el) {
			 var display = el.getStyle('display');
			 if ( display == 'block' )
			 {
			 	point = el;
			 }
		} );
		if (!point && Object.isArray(points))
		{
			point = points.first();
		}
		return point;
	},
	
	addToSupportedCharity:function(objA)
	{
		var sHref = objA.href;
		
		new Ajax.Request(sHref, {
		  method: 'get'	});
		objA.up('p').update('');  
		return false;
	}
});

var interfaceObj = new CInterface({
	'contentAreaSelector':'div.Content',
	'homePage':{
		'maxWidth':1000,
        'minWidth':700
	},
	'makeHomeSelector':'a[rel="makehome"]',
	'addSearchEngine':'a[rel="search_engine"]',
	'actionsSelector':'div.ActionToolsPanel',
	'logoutSelector':'div.Header a[rel="confirm"]',
	'loginSelector':'div.Header a[rel="login"]',
	'signupSelector':'div.Header a[rel="alert"]',
	'searchFieldSelector':'form#s_form input#search',
	'charityFormSelector':'form#ch_form',
	'charityField':'sel_charity',
	'charityFieldId':'sel_charity_id',
	'charityFieldSelectedInPopup':'selected_in_popup',
	'VerifyCharityContainer':'VerifyCharity',
	'backButton':'a.backButton',
	'HopPointsSelector':'div.HopPoints',
	'alertsSelector':'a.link_arr_down',
	'alertsBlock':'alert-block'
});
Event.observe(document, 'dom:loaded', interfaceObj.init.bindAsEventListener(interfaceObj) );
Event.observe(window, 'resize', interfaceObj.resizeHomepageLayout.bindAsEventListener(interfaceObj) );
