var LightboxForm=new Class({
	initialize:function (name,properties,lightboxProperties) {
		this.name=name;
		this.properties=properties;
		this.lightboxProperties=$merge(LightboxForm.lightboxProperties,lightboxProperties);
	},
	show:function (name,callback) {
		Mantis.FormGenerator.FormGeneratorService.GetFormSource(this.name,this.properties || null,function (source) {
			var form=Element.fromMarkup(source,{ callback:function () {
				new Lightbox(form,this.lightboxProperties).show();
				if (callback) callback();
			}.bind(this) });
		}.bind(this));
	}
});
$extend(LightboxForm,{
	show:function (name,properties,lightboxProperties) { new LightboxForm(name,properties,lightboxProperties).show(); }
});

LightboxForm.lightboxProperties={ };


var mapObject = null;
var PresenceDistributor_Lobby = function() {
    var beforeServiceTimeout;
    var service,
		wsRequest;

    var obj = null;
    function init() {

        InsertFlash();

        //--init drop down ajaxed fields
        initDD(null, null);

        //--init navigagion links
        $("showList").addEvent("click", function() { showFullList(); });
        $("showMap").addEvent("click", function() { showMapMode(); });

        //--init toogled elements event funs
        $('presence').getElements(".item").each(function(item, index) {
            item.getElement(".closed").addEvent("click", function() {
                toggleItem(item);
            });
            item.getElement(".item-title-text").addEvent("click", function() {
                toggleItem(item);
            });
        });
        //if region was passed in QS - update data on page
        if (typeof (RegionCode) != "undefined" && RegionCode != null) {
            $("RegionDD").fireEvent("change", RegionCode);
        }
    }

    //--toggle element
    function toggleItem(elm, fromFlash) {
        if (elm != null) {
            if (elm.className.indexOf("open") > -1) { elm.removeClass("open"); }
            else {
                elm.addClass("open");
                var country = elm.get("id").toLowerCase();
                var region = elm.getParent().get("id").toLowerCase();
                if (fromFlash) pageTracker._trackPageview('/where-to-buy/expand/map/' + region + '/' + country + '/virtual');
                else pageTracker._trackPageview('/where-to-buy/expand/' + region + '/' + country + '/virtual');
		window.location.href = "#" + elm.id;
            }
        }
    }
    //--hide flash map, show items as full list 
    function showFullList() {
        $("flashContainer").setStyle("display", "none");

        $('presence').getElements(".presence-region").each(function(item) {
            item.setStyle("display", "block");
        });

        $("showMap").setStyle("display", "block");
        $("showList").setStyle("display", "none");

        $('presence').getElements(".item").each(function(item, index) {
            if (item.className.indexOf("open") > -1) { item.removeClass("open"); }
        });
    }
    //--show flash map, hide full list elements
    function showMapMode() {
        $("flashContainer").setStyle("display", "block");
        $('presence').getElements(".presence-region").each(function(item) {
            item.setStyle("display", "none");
        });
        $("showMap").setStyle("display", "none");
        $("showList").setStyle("display", "block");
    }
    //--flash map init
    function InsertFlash(thePath) {
        obj = new Swiff(Config.siteUrl + 'Flash/worldMap.swf?xmlPath=' + Config.siteUrl + 'Flash/countriesDistributers.ashx&regionXmlPath=' + Config.siteUrl + 'Flash/regions.ashx&regionParam=' + RegionCode + '&rnd=' + Math.random() * 10000, {
            width: 588,
            height: 329,
            id: 'FlashObject',
            wmode: 'transparent',
            bgcolor: '#000000',
            container: $("flashContainer")
        });
        document.mapObject = obj;
    }
    //--regoins drop down "onchange" event func
    function selectRegionDD(regionCode) {
        $('presence').getElements(".presence-region").each(function(item) {
            if (item.id == regionCode) { item.setStyle("display", "block"); }
            else { item.setStyle("display", "none"); }
        });
    }
    function selectRegionInFlash(regionCode) {
        var obj = document.mapObject;
        /*--call flash external interface func*/
        if ((obj) && (obj.object) && (obj.object.selectRegion)) {
            obj.object.selectRegion(regionCode);
        }
    }
    //--countries drop down "onchange" event func
    function selectCountryDD(flashCode) {
        if ($(flashCode)) toggleItem($(flashCode));
        //        var obj = document.mapObject;
        /*--call flash external interface func*/
        //        if ((obj) && (obj.object) && (obj.object.selectCountry)) {
        //            obj.object.selectCountry(flashCode);
        //        }
        window.location.href = "#" + flashCode;
    }
    /*----------------------------------------*/
    /*----select drop downs with AJAX---------*/
    /*----------------------------------------*/
    function abortCurrentWsRequest() {
        if (wsRequest) wsRequest.abort();
    }
    function initCascadedDropDown(select, childrenSelect, wsMethod, onComplete) {
        select.addEvent("change", function() {
            //if region code was passed in QS and this page is loaded first time - update data
            if (typeof (RegionCode) != "undefined" && RegionCode != null && RegionCode == arguments[0]) { this.value = RegionCode; }

            abortCurrentWsRequest();
            $clear(beforeServiceTimeout);
            // delay function cause user may freak out the server with scroll wheel
            beforeServiceTimeout = function() {

                //	if (!this.value) return;

                prepareSelectBeforeRequest(childrenSelect);
                // onComplete could be sent here instead of the default callback function

                wsRequest = wsMethod(this.value, onComplete || function(values) {

                    fillSelectWithHash(childrenSelect, values);
                    wsRequest = null;
                });
            } .delay(50, this);
            selectRegionDD(this.value);
            if (RegionCode == null || RegionCode != arguments[0]) { selectRegionInFlash(this.value); }
        });
        childrenSelect.addEvent("change", function() {
            selectCountryDD(this.value);
        });
    }
    function prepareSelectBeforeRequest(select, firstOptionText) {

        select.disabled = true;
        select.removeChildren();
        select.getParent().show();
        select.adopt(new Element("option", { value: "", text: firstOptionText || "Loading..." }));
    }
    function fillSelectWithHash(select, values, firstOptionText) {
        select.removeChildren();
        var flag = true;

        Hash.each(values, function(value, key) {

            if (flag) {
                select.adopt(new Element("option", { value: "", text: firstOptionText || "All Countries" }));
                flag = false;
            }
            select.adopt(new Element("option", { value: key, text: value }));
            select.disabled = false;
        });

        if (flag) select.adopt(new Element("option", { value: "", text: firstOptionText || "None" }));
        wsRequest = null;
    }
    function initDD(regId, cntId) {
        service = Mantis.Visonic.Services.PresenceDistributor_Lobby;
        var regionDD = $("RegionDD"),
			countryDD = $("CountryDD");
        initCascadedDropDown(regionDD, countryDD, service.GetCountriesByRegionCode);

    }
    /*----------------------------------------*/
    /*----------------------------------------*/
    /*----------------------------------------*/

    $domready(init);

    return {
        ToggleItem: toggleItem
    }
} ();

//---flash external interface funcs
function selectRegion(regionCode) {
    RegionCode = regionCode;
    $("RegionDD").fireEvent("change", regionCode);
}
function selectCountry(flashCode) {
    if ($(flashCode)) { PresenceDistributor_Lobby.ToggleItem($(flashCode),true); }
    window.location.href = "#" + flashCode; 
}

var Login={
	init:function () {
		Resources.RegisterJsFile(Config.rootUrl+"Js/Controls/LoginForm.js");
		$("login-RememberMe").checked = true;
		$waitUntil(
			function () { return !!$("login-form") && typeof(LoginForm)!="undefined"; },
			function () {
				var form=$("login-form");
				Login.form=new LoginForm($("login-form"),{
					alertOnError:false,
					refreshPageOnLogin:true
				});
				
				Login.form.addEvent('onLoginError', function(e) {
					$('advice-required-login-Password').show();
					Login.resetDropdown();
				});
				
				Login.form.addEvent('onLoggedIn', function(e) {
					$('advice-required-login-Password').hide();
					
				});
				$(form["cancel"]).addEvent("click",function(e) {
					Login.clearMessages();
					$('login-UserName').set("value","");
					$('login-Password').set("value",'');
					Login.resetDropdown();
					TopMenu._loginLB.hide();
				});
				$("login-form-forgot-link").addReplacingEvent("click",function(e) {
					$("login-form-form").hide();
					$("login-form-forgot").show();
					$("login-ForgotUserName").set("value",$("login-UserName").get("value"));
					Login.resetDropdown();
				});
				$(form["forgot-cancel"]).addReplacingEvent("click",function (e) {
					Login.clearMessages();
					$("login-form-form").show();
					$("login-form-forgot").hide();
					$('login-ForgotUserName').set("value","");
					Login.resetDropdown();
					e.hide();
				});
				$(form["forgot-close"]).addReplacingEvent("click",function (e) {
					$("login-form-forgot-feedback").hide();
					Login.clearMessages();
					$("login-form-form").show();
					$("login-form-forgot").hide();
					$('login-ForgotUserName').set("value","");
					Login.resetDropdown();
					
				});
				$(form["forgot-send"]).addReplacingEvent("click",function (e) {
					Login.resetPassword(e);
				});
			}
		);
	},
	resetPassword:function (e) {
		Login.clearMessages();
		var userName=$("login-ForgotUserName").value.trim();
		if (!userName) {
			$('advice-required-login-ForgotUserName').show();
			$("login-ForgotUserName").focus();
			Login.resetDropdown();
			return;
		}
		
		//------------if user is email - turn the filter on
//		var filter=/^([\w-]+(?:\.[\w-]+)*)@((?:[\w-]+\.)*\w[\w-]{0,66})\.([a-z]{2,6}(?:\.[a-z]{2})?)$/i;
//		if(!filter.test(userName)){
//			$('invalid-input-login-ForgotUserName').show();
//			$("login-ForgotUserName").focus();
//			Login.resetDropdown();
//			return;
//		}
		UserManager.sendPassword($("login-ForgotUserName").value,function (success) {
			if(success)
			{
				$("login-form-forgot").hide();
				$("login-form-forgot-feedback").show();
//				Login.resetDropdown();
//				$waitUntil(
//					function () { return !$('login-form').getParent('li.login').hasClass('open');},
//					function () {
						Login.clearMessages();
//						$("login-form-form").show();
//						$("login-form-forgot").hide();
//						$("login-form-forgot-feedback").hide();
//						Login.resetDropdown();
//					}
//				);
			}
			else
			{
				$("unregistered-email-login-ForgotUserName").show();
				Login.resetDropdown();
			}
		});
	},
	clearMessages:function() {
		$("unregistered-email-login-ForgotUserName").hide();
		$('advice-required-login-ForgotUserName').hide();
		$('invalid-input-login-ForgotUserName').hide();
		$('advice-required-login-Password').hide();
		Login.resetDropdown();
	},
	resetDropdown:function() {
		var form=$("login-form");
		var dropdown = form.getParent("div.dropdown");
		
		if(dropdown)
		{var container = dropdown.getElement("div.container");
		if(dropdown && container)
		{
			var size = container.getSize().y;
			if(size%2==0) size = size+1;
			dropdown.setStyle('height', size);
			dropdown.getElements('.background').setStyle('height', (size+13)/2);
		}
		}
	}
};
$domready(Login.init,50);
