var GetPartConfiguratorOrderTableResults = function(){
	return{
		init:function(params){
			var oResults = new wsEXT(params);
			
				
				var oGetPartConfiguratorOrderTableResults= function(options, success, response){
				  var results = response.responseXML;
					if (success){
						var s="";
						if (results.text){
							s = results.text;
							
						}
						else{
							s = results.firstChild.textContent;
						}
						PNConfig.BuildConfiguratorOrderTable(s, params);
					
						//alert('success');
					}
					else{
						//alert('fail');
					}
				}
				oResults.StartEXTPOSTRequest(oGetPartConfiguratorOrderTableResults);
		}
	}
}();

var GetPartConfiguratorSelectionsResults = function(){
	return{
		init:function(params){
			var oResults = new wsEXT(params);
			
				
				var oGetPartConfiguratorSelectionsResults= function(options, success, response){
				  var results = response.responseXML;
					if (success){
						var s="";
						if (results.text){
							s = results.text;
							
						}
						else{
							s = results.firstChild.textContent;
						}
						
						if (params.action==EnumPNConfigAction.INIT){
//							PNConfig.BuildConfiguratorPanel(s, params);							
							PNConfig.InitPNConfigPanelResult(s,params);
							
						}
						else if (params.action==EnumPNConfigAction.UPDATE || params.action==EnumPNConfigAction.RESET){
							PNConfig.UpdatePNConfigPanel(s, params);							
						}

					
						//alert('success');
					}
					else{
						//alert('fail');
					}
				}
				oResults.StartEXTPOSTRequest(oGetPartConfiguratorSelectionsResults);
		}
	}
}();

var GetQuickEstimateStateResults = function(){
	return{
		init:function(params,method){
			var oResults = new wsGetQuickEstimateState(params,method);
			
				
				var oGetQuickEstimateStateResults= function(options, success, response){
				  var results = response.responseXML;
					if (success){
						RapidOQ.SetQuickEstimateState(results,params);
					
						//alert('success');
					}
					else{
						RapidOQ.ShowMessage("Fail in retriving states");
					}
				}
				oResults.StartEXTPOSTRequest(oGetQuickEstimateStateResults);
		}
	}
}();

var wsGetQuickEstimateState = function(params,method){
   WS.call(this);
	this._params = params;
	this._method = method;
  
}

wsGetQuickEstimateState.prototype = new WS;

var LogErrorResults = function(){
	return{
		init:function(params){
			var oResults = new wsEXT(params);
			
				
				var oLogErrorResults= function(options, success, response){
				  var results = response.responseXML;
					if (success){
						//RapidOQ.SetQuickEstimateCountry(results, params);
					
						//alert('success');
					}
					else{
						RapidOQ.ShowMessage("Fail to capture error<br>"+response.statusText+"<br>"+params.err);
						//alert('fail');
					}
				}
				oResults.StartEXTPOSTRequest(oLogErrorResults);
		}
	}
}();


var GetQuickEstimateCountryResults = function(){
	return{
		init:function(params){
			var oResults = new wsEXT(params);
			
				
				var oGetQuickEstimateCountryResults= function(options, success, response){
				  var results = response.responseXML;
					if (success){
						RapidOQ.SetQuickEstimateCountry(results, params);
					
						//alert('success');
					}
					else{
						//alert('fail');
					}
				}
				oResults.StartEXTPOSTRequest(oGetQuickEstimateCountryResults);
		}
	}
}();
/*
var wsGetQuickEstimateCountry = function(params,method){
   WS.call(this);
	this._params = params;
	this._method = method;
	//this._quoteId = quoteId;
	
	//this._url = this.GetUrl('validateQuickEstimate','quoteId='+quoteId);
   
}

wsGetQuickEstimateCountry.prototype = new WS;
*/

var SubmitQuickEstimateResults = function(){
	return{
		init:function(params){
			var oResults = new wsEXT(params);
			
				
				var oSubmitQuickEstimateResults= function(options, success, response){
				  var results = response.responseXML;
					if (success){
						RapidOQ.SetCurrentSaveStatus(EnumEstimateStatus.COMPLETE);
						RapidOQ.CloseWindow();
						if (params.action==EnumEstimateAction.PRINT){
							RapidOQ.PrintQuickEstimateResults(results);
						}
						else if (params.action==EnumEstimateAction.EMAIL){
							RapidOQ.EmailQuickEstimateResults(results);
						}
						else if (params.action==EnumEstimateAction.BACK){
							RapidOQ.Clear(params.tab);
						}
						else{
							RapidOQ.SaveQuickEstimateResults(results, params);
						}
					
						//alert('success');
					}
					else{
						// enable button

						// log the error
						var par={
							err:"action:"+params.action+"\n"+response.status+"\n"+response.statusText,
							func:'SubmitQuickEstimateResults',
							userName:'system',
							method:'LogError'
						}
						LogErrorResults.init(par);
						RapidOQ.ShowMessage("Fail to generate Rapid Quote, please try again.");
						//RapidOQ.EnableButton(EnumEstimateButton.PRINT);
						RapidOQ.EnableAllButtons();
		
						
					}
				}
				oResults.StartEXTPOSTRequest(oSubmitQuickEstimateResults);
		}
	}
}();

/*
var wsSubmitQuickEstimate = function(params,method){
   WS.call(this);
	this._params = params;
	this._method = method;
	//this._quoteId = quoteId;
	
	//this._url = this.GetUrl('validateQuickEstimate','quoteId='+quoteId);
   
}

wsSubmitQuickEstimate.prototype = new WS;
*/


var GetQuickEstimateValidateResults = function(){
	return{
		init:function(params){
			var oResults = new wsEXT(params);
			
				var oGetQuickEstimateValidateResults= function(options, success, response){
				  var results = response.responseXML;
					if (success){
						
						RapidOQ.ValidateEstimateDetailResults(results,params);
					
						//alert('success');
					}
					else{
						RapidOQ.CloseWindow();
						var par={
							err:"action:"+params.action+"\n"+response.status+"\n"+response.statusText,
							func:'JS:GetQuickEstimateValidateResults',
							userName:'system',
							method:'LogError'
						}
						LogErrorResults.init(par);
						RapidOQ.ShowMessage("Fail to validate part number(s), please try again.");
						RapidOQ.EnableAllButtons();
						//alert('fail');
					}
				}
				oResults.StartEXTPOSTRequest(oGetQuickEstimateValidateResults);
		}
	}
}();

/*
var wsGetQuickEstimateValidate = function(params,method){
   WS.call(this);
	//this._partNumbers = parts;
	this._params = params;
	this._method = method;
	//this._quoteId = quoteId;
	
	//this._url = this.GetUrl('validateQuickEstimate','quoteId='+quoteId);
   
}

wsGetQuickEstimateValidate.prototype = new WS;
*/

var GetQuickEstimateDetailResults = function(){
	return{
		init:function(quoteId){
			var oResults = new wsGetQuickEstimateDetail(quoteId);
				var oGetQuickEstimateDetailResults = {
					success:oResults.onResponseGetQuickEstimateDetailSuccess,
					failure:oResults.onResponseGetQuickEstimateDetailFailure,
					argument:[oResults]
				}
				oResults.StartRequest(oGetQuickEstimateDetailResults);
		}
	}
}();

var wsGetQuickEstimateDetail = function(quoteId){
   WS.call(this);
	this._quoteId = quoteId;
	
	this._url = this.GetUrl('getQuickEstimateDetail','quoteId='+quoteId);
   
}

wsGetQuickEstimateDetail.prototype = new WS;


wsGetQuickEstimateDetail.prototype.onResponseGetQuickEstimateDetailSuccess= function(o){
         var s ="";
			var results = o.responseXML;
			if (results.getElementsByTagName('Detail').length>0){
				RapidOQ.FillEstimateDetail(results);
			}
			else{
				RapidOQ.ShowMessage("No quick estimate records found.");
			}
			
         //Ext.MessageBox.alert('Newport TV', 'Thank you for subscribing Newport TV', null )
         //alert('success '+results);
         // Comments.closeDialog();

}
wsGetQuickEstimateDetail.prototype.onResponseGetQuickEstimateDetailFailure= function(o){
           
			alert('fail '+o.statusText);
        

}

var GetQuickEstimateHeadResults = function(){
	return{
		init:function(oqId){
			var oResults = new wsGetQuickEstimateHead(oqId);
				var oGetQuickEstimateHeadResults = {
					success:oResults.onResponseGetQuickEstimateHeadSuccess,
					failure:oResults.onResponseGetQuickEstimateHeadFailure,
					argument:[oResults]
				}
				oResults.StartRequest(oGetQuickEstimateHeadResults);
		}
	}
}();

var wsGetQuickEstimateHead = function(oqId){
   WS.call(this);
	this._oqId = oqId;
	
	this._url = this.GetUrl('getQuickEstimateHead','oqId='+oqId);
   
}

wsGetQuickEstimateHead.prototype = new WS;


wsGetQuickEstimateHead.prototype.onResponseGetQuickEstimateHeadSuccess= function(o){
         var s ="";
			var results = o.responseXML;
			if (results.getElementsByTagName('Head').length>0){
				RapidOQ.FillEstimateHead(results);
			}
			else{
				RapidOQ.ShowMessage("No previous estimate records found.");
			}
			
         //Ext.MessageBox.alert('Newport TV', 'Thank you for subscribing Newport TV', null )
         //alert('success '+results);
         // Comments.closeDialog();

}
wsGetQuickEstimateHead.prototype.onResponseGetQuickEstimateHeadFailure= function(o){
           
			alert('fail '+o.statusText);
        

}


var GetEstimateEmailIdResults = function(){
	return{
		init:function(params){
			var oResults = new wsEXT(params);
				var oGetEstimateEmailIdResults= function(options, success, response){
				  var results = response.responseXML;
					if (success){
						RapidOQ.SetOQId(results,params);
					}
					else{
						var par={
							err:response.status+"\n"+response.statusText,
							func:'GetEstimateEmailIdResults',
							userName:params.emailAddress,
							method:'LogError'
						}
						LogErrorResults.init(par);	
						RapidOQ.CloseWindow();					
					}
				}
				oResults.StartEXTPOSTRequest(oGetEstimateEmailIdResults);
		}
	}
}();

/*
var wsGetEstimateEmailId = function(params,method){
   WS.call(this);
	this._params = params;
	this._method = method;
  
}

wsGetEstimateEmailId.prototype = new WS;




var GetEstimateEmailIdResults = function(){
	return{
		init:function(emailAddress){
			var oResults = new wsGetEstimateEmailId(emailAddress);
				var oGetEstimateEmailIdResults = {
					success:oResults.onResponseGetEstimateEmailIdSuccess,
					failure:oResults.onResponseGetEstimateEmailIdFailure,
					argument:[oResults]
				}
				oResults.StartRequest(oGetEstimateEmailIdResults);
		}
	}
}();

var wsGetEstimateEmailId = function(emailAddress){
   WS.call(this);
	this._emailAddress = emailAddress;
	
	this._url = this.GetUrl('getEstimateEmailId','emailAddress='+emailAddress);
   
}

wsGetEstimateEmailId.prototype = new WS;


wsGetEstimateEmailId.prototype.onResponseGetEstimateEmailIdSuccess= function(o){
         var s ="";
			var results = o.responseXML;
			if (results.getElementsByTagName('Head').length>0){
				RapidOQ.SetOQId(results);	
				//s = results.getElementsByTagName('Head')[0].getAttribute('oqId');
			}
			
         //Ext.MessageBox.alert('Newport TV', 'Thank you for subscribing Newport TV', null )
         //alert('success '+results);
         // Comments.closeDialog();

}
wsGetEstimateEmailId.prototype.onResponseGetEstimateEmailIdFailure= function(o){
           
			alert('fail '+o.statusText);
        

}
*/

var SubscribeTVResults = function(){
	return{
		init:function(emailAddress){
			var oResults = new wsSubscribeTV(emailAddress);
				var oSubscribeTVResults = {
					success:oResults.onResponseSubscribeTVSuccess,
					failure:oResults.onResponseSubscribeTVFailure,
					argument:[oResults]
				}
				oResults.StartRequest(oSubscribeTVResults);
		}
	}
}();

var wsSubscribeTV = function(emailAddress){
   WS.call(this);
	this._emailAddress = emailAddress;
	
	this._url = this.GetUrl('doSubscribeTV','emailAddress='+encodeURIComponent(emailAddress));
   
}

wsSubscribeTV.prototype = new WS;


wsSubscribeTV.prototype.onResponseSubscribeTVSuccess= function(o){
         var results = o.responseXML;
         Ext.MessageBox.alert('Newport TV', 'Thank you for subscribing Newport TV', null )
       //  alert('success '+results);
         // Comments.closeDialog();

}
wsSubscribeTV.prototype.onResponseSubscribeTVFailure= function(o){
           
			alert('fail '+o.statusText);
        

}







var ShareMediumResults = function(){
	return{
		init:function(emailAddress,contact,pSubject,pComments,pMId,pUrl){
			var oResults = new wsShareMedium(emailAddress,contact,pSubject,pComments,pMId,pUrl);
				var oShareMediumResult = {
					success:oResults.onResponseShareMediumSuccess,
					failure:oResults.onResponseShareMediumFailure,
					argument:[oResults]
				}
				oResults.StartRequest(oShareMediumResult);
		}
	}
}();


var wsShareMedium = function(emailAddress,contact,pSubject,pComments,pMId,pUrl){
   WS.call(this);
	this._emailAddress = emailAddress;
	this._contact = contact;
	this._subject = pSubject;
	this._comments = pComments;
	this._mId = pMId;
	this._url = this.GetUrl('doShareMedium','emailAddress='+encodeURIComponent(emailAddress)+'&contact='+encodeURIComponent(contact)+'&subject='+encodeURIComponent(pSubject)+'&comments='+ encodeURIComponent(pComments)+'&mId='+pMId+'&url='+encodeURIComponent(pUrl));
   
}

wsShareMedium.prototype = new WS;


wsShareMedium.prototype.onResponseShareMediumSuccess= function(o){
         var results = o.responseXML;
         
      //   alert('success '+results);
         NTV.closeDialog();

}
wsShareMedium.prototype.onResponseShareMediumFailure= function(o){
			alert('fail '+o.statusText);
        

}


var wsEXT = function(params){
   WS.call(this);
	this._params = params;
	this._method = params.method;
  
}

wsEXT.prototype = new WS;


function WS(){
   this._url;
	this._defaultUrl="/webservices/Newport.asmx";
   this._serv;

}


WS.prototype.GetUrl = function(methodName, pars){
   // get this from xml later on
	//var url = "/webservices/Newport.asmx/"+methodName+"?"+pars;	 
	var url = this._defaultUrl+"/"+methodName+"?"+pars;	 
	//alert(url);
	
	//var elStatus = getEl("lblStatus");
	//elStatus.dom.innerHTML = url;
	return url;
};


WS.prototype.StartRequest = function(callback){
	//alert(this._url);
	//YAHOO.util.Connect.asyncRequest('POST', this._url, callback,null);
	YAHOO.util.Connect.asyncRequest('GET', this._url, callback,null);

}

WS.prototype.StartEXTPOSTRequest = function(callback,params){
	this._serv = new Ext.data.Connection();
	this._serv.request({
		//url:this._defaultUrl+"/validateQuickEstimate",
		//params:{partnumbers:this._partNumbers},
		url:this._defaultUrl+"/"+this._method,
		params:this._params,
		method:'POST',
		scope:this,
		callback:callback
	})
}