var generic = generic || {};

/** @namespace global namespace for all JS code on jomalone.co.uk site */
var jm = {};
/** @namespace namespace for page-specific JS code */
jm.page = {};

jm.urlRoot = window.location.protocol + "//" + window.location.hostname;

var URL_DOMAIN = jm.urlRoot;
// TO DO: These should come from a resource bundle
jm.page.PRODUCT_IMG_PATH = "/images/products/photos/";
jm.page.isMoving = false;

jm.page.isCMS = function() {
    return !!( $$('div.cms_layer')[0] );
};

jm.page.initGnav = function() {
};

jm.page.initSearch = function() {
    var input_search = $('search');

    if(!input_search){
        return null;
    }

    input_search.value = 'SEARCH';

    input_search.observe("mouseover", function(evt) {
        $('searchbar').className = 'search-active';
        $('search').value = '';
    });

    jm.page.TypeAheadSearch = new TypeAheadSearch ({
		inputElementId: 'search',
		outputContainerId: 'global-typeahead-search-box',
		activeLink: function() { $('searchbar').addClassName('searchbar-active'); },
		deactiveLink: function() { $('searchbar').removeClassName('searchbar-active'); }
	});

};

jm.page.replaceSelects = function() {
    if (jm.cforms) {
        try {
            jm.cforms.initCustomForms();
        }
        catch(e) {
            console.log(e);
        }
    }
};

jm.page.initPromoLinks = function() {
    $$('#topnavwrap a.expand_link').each(function(oBtn) {
        oBtn.stopObserving('click');
        oBtn.observe("click", function(evt) {
            evt.stop();
            Effect.BlindDown('promos', { duration: 1 });
            $$('#topnavwrap a.expand_link').each(function(expand_link) {
                expand_link.removeClassName('expand_link');
                expand_link.addClassName('collapse_link');
            });
            jm.page.initPromoLinks();
        });
    });
    $$('.promos_area .collapse_link, #topnavwrap .collapse_link').each(function(cBtn) {
        cBtn.stopObserving('click');
        cBtn.observe("click", function(evt) {
            evt.stop();
            Effect.BlindUp('promos', { duration: 1 });
            $$('#topnavwrap a.collapse_link').each(function(expand_link) {
                expand_link.removeClassName('collapse_link');
                expand_link.addClassName('expand_link');
            });
            jm.page.initPromoLinks();
        });
    });
};

/*** For email signup ***/
jm.page.show_signup = function() {
  $('newsletter_popup').style.display='block';
};

jm.page.hide_signup = function() {
	$('newsletter_popup').style.display='none';
};
/*** /For email signup ***/

jm.page.landingPopup = function() {

  if ( generic.cookie("LandingPopupSeen") ) return;

  generic.templatefactory.get({path: '/templates/popups/landing.tmpl', forceReload: true}).evaluateCallback({
    callback: function(html) {

      // write cookes so we do not display on screen again
      generic.cookie("LandingPopupSeen",1 , {path:"/"});

      var wrapperNode = new Element("div", {"class":"landing-wrapper popup"});
      $(document.body).insert(wrapperNode);
      wrapperNode.insert(html);

      generic.overlay.launch({content: wrapperNode, includeBackground: true});

      // wire up close link
      var closeButtonNode = wrapperNode.select("a.close-link")[0];
      closeButtonNode.observe("click", function(closeClickEvent) {
        closeClickEvent.preventDefault();
        wrapperNode.remove();
        generic.overlay.hide();
      });
    }
  });
}

// rewrite to use brx jp common libraries
jm.page.initEmailSignup = function() {
	var emailInputNode = null;
	var emailContainerNode = null;
	var emailFormNode = null;
	var emailSubmitNode = null;
	var emailProgressNode = null;
	emailContainerNode = $$("div.email-signup-container");
	if (!emailContainerNode) {
		return null;
	}
	emailContainerNode.each(function(formEle) {
		var emailFormNode = formEle.select("form")[0];
		var emailSubmitNode = formEle.select("input.input-image")[0];
		var emailProgressNode = formEle.select("span.progress")[0];
		var emailInputNode = formEle.select("input.email-signup")[0];
		emailFormNode.observe("submit", function(submitEvt) {
			submitEvt.preventDefault();
			emailSubmitNode.addClassName("hidden");
			emailProgressNode.removeClassName("hidden");
			var params = emailFormNode.serialize(true);

			 generic.overlay.launch({includeBackground: true});

			generic.jsonrpc.fetch({
				method : 'rpc.form',
				params: [params],
				onSuccess:function(jsonRpcResponse) {
					emailProgressNode.addClassName("hidden");
					emailSubmitNode.removeClassName("hidden");

                    generic.templatefactory.get({path: '/templates/popups/email_signup_thanks.tmpl'}).evaluateCallback({
                       callback: function(html) {

                            generic.overlay.update({content: html});
                            generic.overlay.showContainer();
                            // add agency tag - Double Click signup with email address
                            var axel = Math.random() + "";
                            var a = axel * 10000000000000;
                            var script_text = ' <iframe src="http://fls.doubleclick.net/activityi;src=1816625;type=gener211;cat=signu348;ord=' + a + '?" width="1" height="1" frameborder="0" style="display:none"></iframe>';
                            $('dc_email_signup_tag').insert(script_text);


                        }
                    });
	            },
				onFailure: function(jsonRpcResponse){
				    emailProgressNode.addClassName("hidden");
					emailSubmitNode.removeClassName("hidden");

                    generic.templatefactory.get({path: '/templates/popups/email_signup_error.tmpl'}).evaluateCallback({
                       callback: function(html) {

                            generic.overlay.update({content: html});
                            generic.overlay.showContainer();
                            var errorContainerNode = $('email_signup_errors');
                            var errorObjectsArray = jsonRpcResponse.getMessages();
					        generic.showErrors(errorObjectsArray,errorContainerNode);

                        }
                    });
				}
			});
		});
	});
};

jm.page.initBBEmailSignup = function() {
	var emailInputNode = null;
	var emailContainerNode = null;
	var emailFormNode = null;
	var emailSubmitNode = null;
	var emailProgressNode = null;
	emailContainerNode = $$("div.bb-email-signup-container");
	if (!emailContainerNode) {
		return null;
	}
	emailContainerNode.each(function(formEle) {
		var emailFormNode = formEle.select("form")[0];
		var emailSubmitNode = formEle.select("input.input-image")[0];
		var emailProgressNode = formEle.select("span.progress")[0];
		var emailInputNode = formEle.select("input.promo-email")[0];
		emailInputNode.observe("click", function(submitEvt) {
		  /* beter to set this in the rel tag...... */
		  if(this.value == 'email address') {
		    this.value = '';
		  }
		});
		emailFormNode.observe("submit", function(submitEvt) {
			submitEvt.preventDefault();
			emailSubmitNode.addClassName("hidden");
			emailProgressNode.removeClassName("hidden");
			var params = emailFormNode.serialize(true);
		  generic.overlay.launch({includeBackground: true});
			generic.jsonrpc.fetch({
				method : 'rpc.form',
				params: [params],
				onSuccess:function(jsonRpcResponse) {
					emailProgressNode.addClassName("hidden");
					emailSubmitNode.removeClassName("hidden");
					generic.templatefactory.get({path: '/templates/popups/bb_notification_thanks.tmpl'}).evaluateCallback({
					  callback: function(html) {
					    generic.overlay.update({content: html});
              generic.overlay.showContainer();
              // add agency tag - Double Click signup with email address
              var axel = Math.random() + "";
              var a = axel * 10000000000000;
              var script_text = ' <iframe src="http://fls.doubleclick.net/activityi;src=1816625;type=gener211;cat=signu348;ord=' + a + '?" width="1" height="1" frameborder="0" style="display:none"></iframe>';
              $('dc_email_signup_tag').insert(script_text);
            }
          });
	      },
				onFailure: function(jsonRpcResponse){
				  emailProgressNode.addClassName("hidden");
					emailSubmitNode.removeClassName("hidden");
					generic.templatefactory.get({path: '/templates/popups/email_signup_error.tmpl'}).evaluateCallback({
					  callback: function(html) {
					    generic.overlay.update({content: html});
				      generic.overlay.showContainer();
              var errorContainerNode = $('email_signup_errors');
              var errorObjectsArray = jsonRpcResponse.getMessages();
					    generic.showErrors(errorObjectsArray,errorContainerNode);
            }
          });
				}
			});
		});
	});
};

jm.page.initCEEmailSignup = function() {
	var emailInputNode = null;
	var emailContainerNode = null;
	var emailFormNode = null;
	var emailSubmitNode = null;
	var emailProgressNode = null;
	emailContainerNode = $$("div.christmas_event-email-signup-container");
	if (!emailContainerNode) {
		return null;
	}
	emailContainerNode.each(function(formEle) {
		var emailFormNode = formEle.select("form")[0];
		var emailSubmitNode = formEle.select("input.input-image")[0];
		var emailProgressNode = formEle.select("span.progress")[0];
		var emailInputNode = formEle.select("input.promo-email")[0];
		emailInputNode.observe("click", function(submitEvt) {
		  /* beter to set this in the rel tag...... */
		  if(this.value == 'email address') {
		    this.value = '';
		  }
		});
		emailFormNode.observe("submit", function(submitEvt) {
			submitEvt.preventDefault();
			emailSubmitNode.addClassName("hidden");
			emailProgressNode.removeClassName("hidden");
			var params = emailFormNode.serialize(true);
		  generic.overlay.launch({includeBackground: true});
			generic.jsonrpc.fetch({
				method : 'rpc.form',
				params: [params],
				onSuccess:function(jsonRpcResponse) {
					emailProgressNode.addClassName("hidden");
					emailSubmitNode.removeClassName("hidden");
					generic.templatefactory.get({path: '/templates/popups/christmas_event_notification_thanks.tmpl'}).evaluateCallback({
					  callback: function(html) {
					    generic.overlay.update({content: html});
              generic.overlay.showContainer();
              // add agency tag - Double Click signup with email address
              var axel = Math.random() + "";
              var a = axel * 10000000000000;
              var script_text = ' <iframe src="http://fls.doubleclick.net/activityi;src=1816625;type=gener211;cat=signu348;ord=' + a + '?" width="1" height="1" frameborder="0" style="display:none"></iframe>';
              $('dc_email_signup_tag').insert(script_text);
            }
          });
	      },
				onFailure: function(jsonRpcResponse){
				  emailProgressNode.addClassName("hidden");
					emailSubmitNode.removeClassName("hidden");
					generic.templatefactory.get({path: '/templates/popups/email_signup_error.tmpl'}).evaluateCallback({
					  callback: function(html) {
					    generic.overlay.update({content: html});
				      generic.overlay.showContainer();
              var errorContainerNode = $('email_signup_errors');
              var errorObjectsArray = jsonRpcResponse.getMessages();
					    generic.showErrors(errorObjectsArray,errorContainerNode);
            }
          });
				}
			});
		});
	});
};

jm.page.initHelpHover = function() {
    var can_we_help = $('can_we_help_hover');

    if(!can_we_help){
        return null;
    }

    $('can_we_help_hover').observe( 'mouseover', function (evt) {
        $('can-we-help').addClassName('can-we-help-border-on');
        $('can_we_help_hover_show').show();

            $('can_we_help_hover_show').observe( 'mouseover', function (evt) {
                $('can-we-help').addClassName('can-we-help-border-on');
                $('can_we_help_hover_show').show();
            } );

    } );

    $('can_we_help_hover_show').observe( 'mouseout', function (evt) {
        $('can-we-help').removeClassName('can-we-help-border-on');
        $('can_we_help_hover_show').hide();
            $('can_we_help_hover').observe( 'mouseout', function (evt) {
                $('can-we-help').removeClassName('can-we-help-border-on');
                $('can_we_help_hover_show').hide();
            } );
    } );
};

jm.page.initGiftWrapHover = function() {
    var giftwrap_rollover = $('giftwrap_rollover');

    if(!giftwrap_rollover){
        return null;
    }

    $('giftwrap_rollover').observe( 'mouseover', function (evt) {
        $('giftwrap_rollover_show').show();
        $('giftwrap_rollover_show').observe( 'mouseover', function (evt) {
            $('giftwrap_rollover_show').show();
        } );
    } );

    $('giftwrap_rollover_show').observe( 'mouseout', function (evt) {
        $('giftwrap_rollover_show').hide();
        $('giftwrap_rollover').observe( 'mouseout', function (evt) {
            $('giftwrap_rollover_show').hide();
        } );
    } );
};

jm.page.initFlashResizer = function() {
    var flashPage = $('flashpage');

    if(!flashPage){
        return null;
    }

    jm.page.flashResizer();

    Event.observe(window, 'resize', function(){
        jm.page.flashResizer();
    });
};

jm.page.flashResizer = function() {
    var flashPage = $('flashpage');

    if(!flashPage){
        return null;
    }

    var viewPortHeight = parseInt(document.viewport.getHeight(), 10);
    var flashheight = viewPortHeight - 109;
    flashPage.style.height = flashheight +"px";
};

jm.page.sharePopup = function() {

    generic.overlay.launch({includeBackground: true});

    //grab the html template
    generic.templatefactory.get({path: '/templates/popups/share.tmpl'}).evaluateCallback({
        callback: function(html) {
            //usding the html returned from the above call complete the lightbox
            generic.overlay.update({content: html});
            generic.overlay.showContainer();
        }
    });
};

jm.page.preload_imgs = function()  {
    //We are getting a slight delay on the images for navigation, lets preload them
    var nav_bg = new Image();
    var nav_li_hover = new Image();

    nav_bg.src = '/images/drop_bac.gif';
    nav_li_hover.src = '/images/dropdown_hover.gif';
};

/* add page events */
document.observe("dom:loaded", function() {
    jm.page.preload_imgs();
    jm.page.initPromoLinks();
    jm.page.initGnav();
    jm.page.initSearch();
    jm.page.initEmailSignup();
    jm.page.initBBEmailSignup();
    jm.page.initCEEmailSignup();
    jm.page.initHelpHover();
    jm.page.initGiftWrapHover();
    jm.page.replaceSelects();
    //jm.page.landingPopup(); switch off 201211

    // setup cart
    var cartParams = {};
    cartParams.pageDataKey = 'nav-header.cart';

    var page_refreshed = $('page_refreshed');

    // If the user presses the back button we cannot rely on the page_data being correct.
    // lets get a fresh cart from the db.
    if(page_refreshed) {
        if(page_refreshed.value == 'no') {
            page_refreshed.value = 'yes';
        }
        else {
            cartParams = {};
        }
    }

    generic.checkout.cart.getCart(cartParams);

    if (jm.productView && jm.productView.cartOverlay) {
        jm.productView.cartOverlay.init();
    }

    jm.page.initFlashResizer();

});
