var Diagnosis = function(){
	return {
		init:function(options){
			
			Diagnosis.searchEngine = options['search_engine'];
			Diagnosis.reportId = options['rid'];
			Diagnosis.maxResults = options['max_results']?options['max_results']:500;
			Diagnosis.totalPages = typeof options.total_pages!='undefined'?options.total_pages:0;
		},
		apiUrls:{
					links:{
							'yahoo':'http://search.yahooapis.com/WebSearchService/V1/webSearch?appid=YahooDemo&'
						  },
					pages:{
							'yahoo':'http://search.yahooapis.com/WebSearchService/V1/webSearch?appid=YahooDemo&'
					}
		},
		searchEngine:'yahoo',
		progressBarId:'progressbar',
		mainURL:'',
		pagesList:[],
		
		maxResults:100,
		totalActions:0,
		currentAction:0,
		totalPages:0,
		pagesCheckingFrom:0,
		working:0,
		startSiteDiagnosis:function(){
			Diagnosis.showProgressBar();
			Diagnosis.startCheckingPages(Diagnosis.totalPages);
		},
		completeSiteDiagnosis:function(){
			window.location.href = 'site.html?rid='+Diagnosis.reportId+'&do=result';
		},
		incrementActionPosision:function(inc){
			var i = typeof inc != 'undefined'?parseInt(inc):1;
			Diagnosis.currentAction += i;
			var v = Diagnosis.totalActions==0?0:Math.round((Diagnosis.currentAction/Diagnosis.totalActions)*100);
			v = v>100?100:v;
			Diagnosis.applyProgressBarValue(v);
		},
		applyProgressBarValue:function(v){
			var value = typeof v != 'undefined'?parseInt(v):0;
			var objProgesbar = jQuery('#'+Diagnosis.progressBarId);
			if (objProgesbar.length>0){
				//var fullwidth = objProgesbar.width();
				//var width = Math.round((v*fullwidth)/100);
				objProgesbar.find('.progressline').width(v+'%');
				objProgesbar.find('.progresstext').html(v+'%');
			}
		},
		applyProgressBarMessage:function(message){
			var message = Goingup.truncate(message,100)
			jQuery('#progressmessage').html(message);
		},
		showProgressBar:function(){
			var progressbarHtml = '<div id="progressbar"><div class="progressline" style="width:0%;"><span class="progresstext"></span></div></div>' +
									'<div id="progressmessage">Loading...</div>';
			var options = {
					msg_title:'Processing, please wait...',
					msg:progressbarHtml,
					buttons:'none'
   				} ;
			Goingup.Dialog.Show(options);
		},
		
		startCheckingPages:function(total_pages){
			if (!total_pages){
				return;
			}
			total_pages = parseInt(total_pages);
			if (total_pages){
				Diagnosis.totalActions = Diagnosis.currentAction + total_pages;
				Diagnosis.incrementActionPosision(0);
			}
			
			if (total_pages>0){
				var portion = 20;
				var max = Math.ceil(total_pages/portion);
				for (var i=0; i<max; i++){
					
					Diagnosis.pagesCheckingFrom = i*portion;
					Diagnosis.checkAllPages(Diagnosis.pagesCheckingFrom);
					
				}
			}
		},
		checkAllPages:function(start){
			var message = '';
			message += 'Checking pages';
			Diagnosis.applyProgressBarMessage(message);
			var options = {
		 					params:{'do':'getpages','start':start,'rid':Diagnosis.reportId},
		 					url:'site.html',
		 					method:'post',
		 					mode:'none',
		 					callAfterSuccess:function(data){
		 						Diagnosis.applyProgressBarMessage('&nbsp;');
		 						if (data.urls && data.urls.length>0){
		 							var apiurl = Diagnosis.apiUrls['pages'][Diagnosis.searchEngine];
		 							for (var i=0; i<data.urls.length; i++){
		 								var url = data.urls[i];
		 								var strParams = 'query=site:'+url+'&omit_inlinks=1'+'&start='+start+'&results='+1+'&output=json&callback=?'
		 								
		 								var urls = [url];
		 								
		 								var objJson = new Diagnosis.jsonRequest({'do':'updatepages','rid':Diagnosis.reportId,'urls[]':urls});
		 								objJson.doRequest(apiurl+strParams);
		 							}
		 						}
		 					}
			 			};
			Goingup.Request(options);			 			
		},
		/**
		 * {'do':'updatepages','rid':Diagnosis.reportId,'urls[]':urls}
		 */
		jsonRequest:function(options){
			var jthis = {
				params:options,
				doRequest:function(_request_url){
					Diagnosis.working++;
					$.getJSON(_request_url, function(data){
						var subtotal = parseInt(data.ResultSet['totalResultsAvailable']);
						var subfrom = parseInt(data.ResultSet['firstResultPosition']);
						var subcount = parseInt(data.ResultSet['totalResultsReturned']);
						
						Diagnosis.incrementActionPosision();
						if (subtotal>0){
							var options = {
								params:jthis.params,
								url:'site.html',
			 					method:'post',
			 					mode:'none',
			 					callAfterSuccess:function(data){
			 						Diagnosis.working--;
			 						if (Diagnosis.working==0){
			 							Diagnosis.completeSiteDiagnosis();
			 						}
			 					}
							}
							Goingup.Request(options);
						}else{
							Diagnosis.working--;
							if (Diagnosis.working==0){
								Diagnosis.completeSiteDiagnosis();
							}
						}
					});
			  }
			}
			return jthis;
		}
	}
}();
	

jQuery(function(){
	jQuery('#fmForm').submit(function(event,params,options){
		if (typeof options == 'undefined'){
			var options = {
				show_inline_loader_for:'#btn_submit',
				callAfterSuccess:function(data){
					if (data.reportId){
						 Diagnosis.init({
							  			'search_engine':'yahoo',
								  		'url':data.reportURL,
								  		'rid':data.reportId,
								  		'total_pages':data.totalPages
							  			});
	  					 Diagnosis.startSiteDiagnosis();
					}
				},
				callAfterFailed:function(data){
					jQuery('#btn_submit').html('<button class="ld_button_check" type="submit"></button>');
				}
			}
		}
		return Goingup.Form.Submit(this,params,options);	
	});
});
