﻿$jq.namespace('MatchCore');

$jq(document).ready(function() {
	MatchCore.CP.init();
	MatchCore.CP.StatefulPane.init();
});

MatchCore.CP = function() {
    var _sid = '';
    var _theme = 0;
    var _trackingID;
    var _bannerID;
    var _pageID;
    var _pageVersion;
    var _cpServer;
    var _cpResourceRoot;
    var _postedForm = null;
    var _mauth;
    var _readyDelegate = new MatchCore.Delegate();
    var _ready = false;

    var self = {
        SID: function(sid) {
            if (arguments.length > 0) {
                _sid = sid;
            }
            else {
                return _sid;
            }
        },

        Theme: function(theme) {
            if (arguments.length > 0) {
                _theme = theme;
            }
            else {
                return _theme;
            }
        },

        TrackingID: function(trackingID) {
            if (arguments.length > 0) {
                _trackingID = trackingID;
            }
            else {
                return _trackingID;
            }
        },

        CpServer: function(cpServer) {
            if (arguments.length > 0) {
                _cpServer = cpServer;
            }
            else {
                return _cpServer;
            }
        },

        CpResourceRoot: function(cpResourceRoot) {
            if (arguments.length > 0) {
                _cpResourceRoot = cpResourceRoot;
            }
            else {
                return _cpResourceRoot;
            }
        },

        BannerID: function(bannerID) {
            if (arguments.length > 0) {
                _bannerID = bannerID;
            }
            else {
                return _bannerID;
            }
        },

        PageID: function(pageID) {
            if (arguments.length > 0) {
                _pageID = pageID;
            }
            else {
                return _pageID;
            }
        },

        PageVersion: function(pageVersion) {
            if (arguments.length > 0) {
                _pageVersion = pageVersion;
            }
            else {
                return _pageVersion;
            }
        },

        PostedForm: function(form) {
            if (arguments.length > 0) {
                _postedForm = form;
            }
            else {
                return _postedForm;
            }
        },

        Mauth: function(mauth) {
            if (arguments.length > 0) {
                _mauth = mauth;
            }
            else {
                return _mauth;
            }
        },

        init: function() {
            _sid = $jq.readCookie('SECU')['ESID'];
            _theme = $jq.readCookie('SECU')['THEME'];

            MatchCore.CP.CurrentUser.onReady(function() {
                if (MatchCore.CP.CurrentUser.LoggedIn()) {
                    $jq('BODY').addClass('cp_userLoggedIn');

                    $jq('.cp_renderHandle').text(MatchCore.CP.CurrentUser.Handle());
                }

                if (MatchCore.CP.CurrentUser.Registered()) {
                    $jq('BODY').addClass('cp_userRegistered');
                }

                if (MatchCore.CP.CurrentUser.Subscribed()) {
                    $jq('BODY').addClass('cp_userSubscribed');
                }
            });

            MatchCore.CP.ClientMessages = {};

            //			MatchCore.CP.Services.invoke({
            //				method : 'GetClientMessages',
            //				success : function(response) {
            //				        MatchCore.CP.ClientMessages = response;
            //				}
            //			});

            $jq.ajax({
                type: 'GET',
                url: MatchCore.Application.resolveUrl('~/rest/MainService.ashx/GetClientMessages'),
                dataType: 'json',
                async: false,
                success: function(response) {
                    MatchCore.CP.ClientMessages = response;
                }
            });
        },
        
        onReady : function (handler) {
            _readyDelegate.add(handler);
			
			if (_ready)
			    _readyDelegate.fire();
		},
		
		ready : function() {
		    _ready = true;
			_readyDelegate.fire();
		},

        ui_busy: function() {
            $jq('BODY').addClass('cp_working');
        },

        ui_done: function() {
            $jq('BODY').removeClass('cp_working');
        },
        
        getAsset: function(path) {
            return self.CpServer() + path;
        }
    };
    
    return self;
} ();

MatchCore.CP.CurrentUser = function() {
    var _handle = "";
    var _subscribed = false;
    var _loggedIn = false;
    var _registered = false;
    var _emailAddress = "";
    var _readyDelegate = new MatchCore.Delegate();

    return {
        Handle: function(handle) {
            if (arguments.length > 0) {
                _handle = handle;
            }
            else {
                return _handle;
            }
        },

        Subscribed: function(subscribed) {
            if (arguments.length > 0) {
                _subscribed = subscribed;
            }
            else {
                return _subscribed;
            }
        },

        Registered: function(registered) {
            if (arguments.length > 0) {
                _registered = registered;
            }
            else {
                return _registered;
            }
        },

        LoggedIn: function(loggedIn) {
            if (arguments.length > 0) {
                _loggedIn = loggedIn;
            }
            else {
                return _loggedIn;
            }
        },

        onReady: function(handler) {
            _readyDelegate.add(handler);
        },

        ready: function() {
            _readyDelegate.fire();
        },

        EmailAddress: function(emailAddress) {
            if (arguments.length > 0) {
                _emailAddress = emailAddress;
            }
            else {
                return _emailAddress;
            }
        }
    };
} ();

MatchCore.CP.Services = function() {
	var _proxy = new MatchCore.ServiceProxy(MatchCore.Application.resolveUrl('~/rest/MainService.ashx'));
	
	return {
		persistCookies : function (response) {
			if (response.Cookies) {
				for (var key in response.Cookies) {
					$jq.createCookie(key, response.Cookies[key], 30);
				}
			}
		},
		
		invoke : function (opts) {
			_proxy.invoke(opts);
		}
	};
}();

MatchCore.CP.Messaging = function() {
	var _messages = null;
	
	var hasMessageSummary = function() {
		return $jq('.errorMessageSummary').length > 0;
	};
	
	var getMessageSummary = function() {
		return $jq('.errorMessageSummary');
	};
	
	var hasFieldLevelError = function(fieldName) {
		return $jq('.error_' + fieldName).length > 0;
	};
	
	var getFieldLevelError = function(fieldName) {
		return $jq('.error_' + fieldName).filter('.fieldError');
	};
	
	return {
		reset : function() {
			if (hasMessageSummary) {
				getMessageSummary().html('');
				getMessageSummary().hide();
			}
			
			$jq('.fieldError').each(function() {
				$jq(this).hide();
			});
			
			if (_messages) {
				for (var i = 0; i < _messages.length; i++) {
					var field = $jq('INPUT[@name="' + _messages[i].field + '"]')[0];
					var label = $jq('LABEL[@for="' + _messages[i].field + '"]')[0];
					
					$jq(label).removeClass('invalidFieldLabel');
					$jq(field).removeClass('invalidField');
				}
			}
			
			_messages = null;
		},
		
		show : function(messages) {
			this.reset();
			
			_messages = messages;
			
			if (hasMessageSummary()) {
				getMessageSummary().html('<ul></ul>');
				getMessageSummary().show();
			}

			for (var i = 0; i < messages.length; i++) {
				if (messages[i].Field) {
					var field = $jq('INPUT[@name="' + messages[i].Field + '"]');
					var label = $jq('LABEL[@for="' + messages[i].Field + '"]');
					
					label.addClass('invalidFieldLabel');
					field.addClass('invalidField');
					if (i == 0 && field.length > 0)
						field.focus();
						
					if (hasFieldLevelError(messages[i].Field)) {
						var fieldError = getFieldLevelError(messages[i].Field);
						
						fieldError.html(messages[i].Text);
						fieldError.show();						
					}
				}
				
				if (hasMessageSummary())
					$jq('UL', getMessageSummary()[0]).append('<li>' + messages[i].Text + '</li>');

			}
		}
	};
}();

MatchCore.CP.Resources = function() {
	var _resources = [];
	
	var getResource = function (name) {
		var url = MatchCore.CP.CpResourceRoot() + name + '.xml';
		
	};
		
	return {
		LoginMessages : function () {
			return getResource('LoginMessages');
		}
	};
}();

MatchCore.CP.StatefulPane = {
	init : function() {
		$jq('.cp_stateful').each(function() {
			//walk through any child div with 'View' in the className
			var loginView = $jq('.loginView', this);
			var registerView = $jq('.registerView', this);
			
			$jq("[class $= 'View']").each(function() {
				var view = this;
				
				$jq('.switchToLoginView', view).each(function() {
					if (loginView.length > 0) {
						$jq(this).bind('click', function() {
							MatchCore.CP.ui_busy();
							
							$jq(view).fadeOut('fast', function() {
							    MatchCore.CP.Messaging.reset();
								loginView.fadeIn('slow');
								MatchCore.CP.ui_done();
							});
						});
					}
				});
				
				$jq('.switchToRegisterView', view).each(function() {
					if (registerView.length > 0) {
						$jq(this).bind('click', function() {
							MatchCore.CP.ui_busy();
							$jq(view).fadeOut('fast', function() {
							    MatchCore.CP.Messaging.reset();
								registerView.fadeIn('slow');
								MatchCore.CP.ui_done();
							});
						});
					}
				});
			});
		});
	}
};

MatchCore.CP.ClientMessages = function(){
    var _messages = [];
	return{
	
	init: function(){
	    
	},
	client_message: function(opt){
	    if (arguments.length > 0) {
                _messages = opt;
            }
            else {
                return _messages;
            }
	    
	}
	};
}();