//define the namespaces
jmaki.namespace("jmaki.widgets.moa.genericsignupwidget");

/**
 * jMaki wrapper for genericsignupwidget
 * 
 * @author ""
 * 
 * use '/moa/genericsignupwidget/loadItems' to publish msgs use
 * '/moa/genericsignupwidget' to subscribe msgs
 * 
 * @requires websiteId as parameter
 * 
 * eg:jmaki.publish("/moa/genericsignupwidget/openSignupWidget", { });
 * 
 */
jmaki.widgets.moa.genericsignupwidget.Widget = function(wargs) {
	try {
		// self pointer
		var _widget = this;

		// this uuid will be generated by jmaki and will be assigned to this
		// widget  component
		var uuid = '#' + wargs.uuid;

		// default publich topicName
		var publish = "/moa/genericsignupwidget";
		// default subscribe topicName -- multiple topicNames can be configured
		var subscribe = [ "/moa/genericsignupwidget" ];
		// default subscribe topicHandler
	
		var tasks = [ "/openSignupWidget" ];
	
		// accept custom publish topic name if any defined
		if (wargs.publish) {
			publish = wargs.publish;
		}

		// accept custom subscribe topic name if any defined
		if (wargs.subscribe) {
			if (typeof wargs.subscribe == "string") {
				subscribe = [];
				subscribe.push(wargs.subscribe);
			} else {
				subscribe = wargs.subscribe;
			}
		}

		/**
		 * register all the available task handlers for subscribe
		 */
		var initSubscribe = function() {
			_widget.subs = [];
			for ( var task = 0; task < tasks.length; task++) {
				doSubscribe(subscribe + tasks[task], _widget.openSignupWidget);
			}
		};

		/**
		 * subscribe the task
		 */
		var doSubscribe = function(topic, handler) {
			var i = jmaki.subscribe(topic, handler);
			_widget.subs.push(i);
		};
		/**
		 * Initialize
		 */
		var init = function() {
			initSubscribe();
		};
		/**
		 * Should be called once jMaki is loaded
		 */
		this.postLoad = function() {
			init();	
			jmaki.injector.inject( {
				url : contextRoot+'pages/signup/genericSignUp.jsp',
				injectionPoint :wargs.uuid + '_external_content'
			});
		};
		/** -------------------------------------------------------------------------------------------------------* */
		// custom code//
		/** -------------------------------------------------------------------------------------------------------* */
		var _subscriptionType = ''; 
		var _signupType='';
		
		this.openSignupWidget = function(e, c) {
			if(e.subscriptionType){
				_subscriptionType = e.subscriptionType;
			}
			if(e.signupType){
				_signupType = e.signupType;
			}
			//$(uuid+'_external_content').html("");
			
			
			if(_subscriptionType =='generic'){
				$('#generic_tpl').show();
				$('#signup_tpl').hide();
				$('#signup_tabs').hide();
			}	
			else{
				_widget.setDefaults();
				$('#generic_tpl').hide();
				$('#signup_tpl').show();
				$('#signup_tabs').show();
				
			$('#signup_wrapper').show();
			
			}
			renderSignupOnPanel(_subscriptionType);
			
		};
		this.setDefaults = function(){
			 $('.signUpForm').css('display','') ;	
			 $('#signup_tpl').css('display','') ;
			 $('#signupmessageid').css('display','none') ;
			if(_subscriptionType =='artist'){
				$('#trsignupType').css('display','') ;
				$('#bandNameDtls').css('display','') ;
				$('#signUpArtist').click();							
				$('#signUpArtist').attr('checked','checked');
				$('#recordCompanyNameDtls').css('display','none') ;
				$('#recordCompanyWebsiteDtls').css('display','none') ;
			}
			else if(_subscriptionType =='user'){
				$('#stageNameDtls').css('display','none') ;
				$('#bandNameDtls').css('display','none') ;
				$('#recordCompanyNameDtls').css('display','none') ;
				$('#recordCompanyWebsiteDtls').css('display','none') ;
			}
			else if(_subscriptionType =='recordcompany'){
				$('#trsignupType').css('display','none') ;
				$('#stageNameDtls').css('display','none') ;
				$('#bandNameDtls').css('display','none') ;
				$('#recordCompanyNameDtls').css('display','') ;
				$('#recordCompanyWebsiteDtls').css('display','') ;
				
			}
		};
		// internal call back function to render the available entries on to page
		var renderSignupOnPanel = function(subscriptionType) {
			
			 $('.error').css('display','none') ;
			 if(document.getElementById('spanSelectBox'))
				 document.getElementById('spanSelectBox').innerHTML = '';
			 
			 loadDialog();
			 setTitle(_signupType);
			 _widget.setGenericSignupDtls();
			 
		};
		
		var countryList = function(countrylist)
		{
			
			var dropdownList1 = $('#country');
			if (countrylist != null && countrylist.length>0) {
				for (var _i=0; _i < countrylist.length; _i++) {
					var option  =  getoptionEle();
					option.attr('value', countrylist[_i].countryId);
					option.attr('text', countrylist[_i].name);
					dropdownList1.append(option); 
				}
			}
			
		};

		var loadDialog = function() {
			$(uuid).dialog( {
				width :880,
				bgiframe :false,
				autoOpen: false,
				modal :true,
				resizable :false,
				title :_signupType,
				dialogClass:'moausersignup',
				close : function(){
				clearFields(this);
				$((uuid)+'_external_content').find('.error').attr('id','');
				}
			});
			
			$(uuid).dialog('open');		
			if (navigator.userAgent.indexOf("Firefox")!=-1)
				$('.ui-widget-overlay').css('z-index','1000');
			$(uuid).find('.error:first-child').attr('id','idErrorBox');	
			$(uuid).find('.bottomerrorbox').attr('id','idErrorBoxbottom');
		};
		
		this.setGenericSignupDtls =  function(){
			$('#signuptab_content').css('display','') ;
			$("#privacytab_content").css('display','none') ;
			$('#termstab_content').css('display','none') ;
			if(_subscriptionType =='user'){
				$('#stageNameDtls').css('display','none') ;
				$('#trsignupType').css('display','none') ;
			}
			
			signup.getCountryList(countryList);
			
			_widget.captchaRefresh();
			setTimeout(function () {
				setPlayer();
			}, 1000); //10000
			
		};
		function setPlayer(){
			
			$("#signuptab").click();
		}
		var setTitle = function(title) {
			if ($('.ui-dialog-title')) {
				$('.ui-dialog-title').text(title);
			}
		};
		
	

this.saveProgramDetails = function(){
			 $('.error').css('display','none') ;
			if($('#signUpArtist').attr('checked')){
				var arrRequiredElements=new Array('firstName','lastName','country','signup_id','signup_password','captchaAnswer');
				var arrRequiredElementsMessages=new Array('First Name','Last Name','Country','Email Address','Password','Word Verification');
			}
			else if($('#signUpBand').attr('checked')){
				var arrRequiredElements=new Array('bandName','firstName','lastName','country','signup_id','signup_password','captchaAnswer');
				var arrRequiredElementsMessages=new Array('Band Name','First Name','Last Name','Country','Email Address','Password','Word Verification');
			}
			else
			{
				var arrRequiredElements=new Array('firstName','lastName','country','signup_id','signup_password','captchaAnswer');
				var arrRequiredElementsMessages=new Array('First Name','Last Name','Country','Email Address','Password','Word Verification');
			}
			if(checkMandatoryDetailed(arrRequiredElements,arrRequiredElementsMessages))
			{
				_widget.validateSaveLogin();
			}
			
		};	
		this.validateSaveLogin =  function(){
			signup_id =	$('#signup_id').val();
			retypesignup_id = $('#signup_retypeid').val();
			signup_password = $('#signup_password').val();
			signup_retypepassword = $('#signup_retypepassword').val();
			if(isValidEmail($('#signup_id').val() ,'Invalid Email Address. Enter correct email address'))
			{
				
				if(signup_id != retypesignup_id){
					displayError("Retype Email Address does not match");
					$('#signup_retypeid').value('');
			
				}
				else if(signup_password != signup_retypepassword){
					displayError("Retype Password does not match");
					$('betaprogram_signup_retypepassword').value('');
			
				}
				else if($('#termsAccepted').attr('checked'))
				{
					_widget.checkCaptchaAnswer();
				}
				else
				{
					displayError("Please Accept the Terms and Conditions");
				}
			}
		};
		
		this.checkCaptchaAnswer = function(){
			 var captchaAnswer =$('#captchaAnswer').val() ;
			try{
				signupDetails.checkCaptcha(captchaAnswer ,captchaResult);
			}catch(Error){
				_widget.captchaRefresh();
				_widget.clearAnswerField();
				displayError("The characters you entered didn't match the word verification. Please try again.");
			}
		};
		
		var captchaResult = function(result){

			if(result == false)
			{
				_widget.captchaRefresh();
				_widget.clearAnswerField();
				displayError("The characters you entered didn't match the word verification. Please try again.");
			}
			else{
				if(_subscriptionType =='user')
					signUpType =SIGN_UP_TYPE_FAN;
				else if(_subscriptionType =='recordcompany')
					signUpType =SIGN_UP_TYPE_RECORD_COMPANY;
				else
					signUpType = $("input[name='signUpType']:checked").val();
				signupDetails.checkForDuplicateSignUp(signup_id,signUpType,duplicateResult);
			}
		};
		
		var duplicateResult =  function(booleanResult){
			if(booleanResult){
				if($('#SignUpBand').attr('checked'))
				{
					displayError("Signup detail with similar band email exists.");	
				}
				else
				{
					displayError("Signup detail with similar email address exists.");	
				}
			}
			else{
				try{
				signupDetails.saveSignupDetails($('#firstName').val(),$('#lastName').val(),$('#country').val(),signup_id,signUpType,$('#stageName').val(),$('#bandName').val(),signup_password,$('#companyName').val(),$('#companyWebsite').val(),saveProgramDetails);
				}
				catch(er){}
			}
		};
		
		var saveProgramDetails = function(saved){
			if(saved)
			{
				window.scrollTo(0,0);
				$('#idErrorBox').css('display','none') ;
				$('#idErrorBox_bottom').css('display','none') ;
				$('.signUpForm').css('display','none') ;
				$('#signupmessageid').css('display','') ;
				
				$('#signupmessage_confirm').html("Your signup is successfull, You can now log into MusicOnlineAlive.");
			}
		};
		
		this.signupClosedialog = function() {							
			$(uuid).dialog("close");
		};
		
		this.captchaRefresh = function()
		{
			 var new_src ='';
			 new_src = $("#captchaImg").attr('src')+'?'+Math.random();
			 $("#captchaImg").attr('src', new_src);
		};
		
		this.clearAnswerField = function(){
			$('#captchaAnswer').val('');
		};
		
		var  clearFields = function(container) { 
		    var selects = container.getElementsByTagName('select'); 
		    
		    for(var i=0, len=selects.length; i < len; i++) { 
	            if(selects[i].selectedIndex > 0){	
	            	selects[i].selectedIndex = -1;
	            }
		    } 
			
		var spans = container.getElementsByTagName('span'); 
		  for(var _i1=0, _len1=spans.length; _i1 < _len1; _i1++) { 
		        var span = spans[_i1]; 
		        if (span.id == 'spanSelectBox')
		        {
		        	if(span.innerHTML != '')
		        	{
		        		span.innerHTML = '';
		        	}
		        }
		    } 
		    var fields = container.getElementsByTagName('input'); 
	    
		    for(var _i=0, _len=fields.length; _i < _len; _i++) { 
		        var field = fields[_i]; 
		        switch(field.type) 
		        { 
		        
		            case 'radio': 
		            case 'checkbox': 
		                field.checked = false; 
		                break; 
		 
		            case 'text': 
		            case 'password': 
		            case 'hidden': 
		                  field.value = '' ;
		        } 
		    } 
		 
		     fields = container.getElementsByTagName('textarea'); 
		    for(var _i1=0, _len1=fields.length; _i1 < _len1; _i1++) { 
		        fields[_i1].value = '' ;
		    } 
		  
		}; 
		
		var getoptionEle = function() {
			   return $("<option></option>").clone();
		};
	}
	catch (error) {
		
	}
};

