// Global Declarations
var isNetScape = isBrowser("Netscape", 0);
var validationCountArray  = new Array();
var validationFormNumber = 0;
var validationSuccess;
var address1Array = new Array();

var address2Array = new Array();
var cityArray = new Array();
var stateArray = new Array();
var zipArray = new Array();
var zip4Array = new Array();

//address1Array = GetElement('RTAVaddress1', 'text');
address1Array = xClass$('RTAVaddress1');
//address2Array = GetElement('RTAVaddress2', 'text');
address2Array = xClass$('RTAVaddress2');
//cityArray = GetElement('RTAVcity', 'text');
cityArray = xClass$('RTAVcity');
//stateArray = GetElement('RTAVstate', 'select-one');
stateArray = xClass$('RTAVstate');
//zipArray = GetElement('RTAVzip', 'text');
zipArray = xClass$('RTAVzip');
//zip4Array = GetElement('RTAVzip4', 'text');
zip4Array = xClass$('RTAVzip4');
// For multiple shipping forms
	var hiddenShippingNames = x$('hiddenRTAVShippingNames');
	var ShippingNamesArray = new Array();
	if(hiddenShippingNames){
		ShippingNames = hiddenShippingNames.value;
		ShippingNamesArray = ShippingNames.split(',');
	}		
	
	for (var i=0; i <= address1Array.length; i++){
			        validationCountArray[i] = 0;
			        }
function SendAddress(userAction, address1,address2,city,state,zipcode, validationCount, shippingName)
{ 
 var form = x$("realTime");
 var ajax = new Ajax();
 var oAjxRespHandler = new AjaxResponseHandler1(ajax, form, AddressValidationCallback);  
 var currentURL = window.location.href;
  _postURL = currentURL.substring(0,currentURL.toLowerCase().indexOf('/account/'));//https://www.gevalia.com/
 _postURL = _postURL + '/controls/dtc/common/realtimecontroller.aspx';
 if (window.location.href.indexOf('https:')==0 && _postURL.indexOf('http:')==0)
   _postURL = _postURL.replace('http:','https:');   
 var sFormData="UserAction=" + userAction + "&address1=" + encodeURIComponent(address1) + "&address2=" + encodeURIComponent(address2) + 
				"&city=" + encodeURIComponent(city) + "&state=" + encodeURIComponent(state) + 
				"&zipcode=" + encodeURIComponent(zipcode) + "&validationCount=" + validationCount + "&sourcePage=" + currentURL;
  if(shippingName)
	sFormData = sFormData + '&shippingName=' + shippingName;
  sFormData = sFormData + '&cycleNumber=' + RTAVCycleIDArray[validationFormNumber];
  if(typeof RTAVCampaignID != 'undefined')
	sFormData = sFormData + '&campaignID=' + RTAVCampaignID;
  if(typeof basketID != 'undefined')
	sFormData = sFormData + '&basketID=' + basketID;
 ajax.uiWaitMethod = oAjxRespHandler.showWaitStatus;
 ajax.uiClearWaitMethod = oAjxRespHandler.clearWaitStatus;
 ajax.makeRequest('POST', _postURL, oAjxRespHandler.onResponseReceived,sFormData);
 if(typeof RTAVTimeout != 'undefined')
	ajax.TimeoutID = setTimeout(RequestTimedOut, RTAVTimeout);
 else
	ajax.TimeoutID = setTimeout(RequestTimedOut, 15000);
}

function AjaxResponseHandler1(_ajaxObj, _formLayer, _callBack, _waitParams)
{	
var me = this;
	me.toString = function() {return "AjaxResponseHandler1"; }
	me.shouldParseResponseXML = true;
	me.shouldDisplayDefaultError = true;
	me.formLayer = _formLayer || document;
	me.readyState = "wait";
	me.ajaxObj = _ajaxObj;
	me.args = [];
	me.callBackFunction = _callBack;
	me.waitParams = _waitParams;
	if (arguments.length > 2){
     for (var argsi=2; argsi < arguments.length; argsi++){
       me.args.push(arguments[argsi]);
     }
	}
	
	me.parseResponseXML = function(_responseXML){   
    var xmlResp = xLoadXML(_responseXML);

		var xmlRespElem;
		if (!xmlResp){
			return true;
			}
		else
		{		
			if(isNetScape == true)
			{	var popupLayer = xmlResp.firstChild.childNodes[1].attributes[0].nodeValue;
				xmlRespElem = xmlResp.firstChild.childNodes[1];
			}
			else 
			{	var popupLayer = xmlResp.firstChild.firstChild.attributes(0).nodeValue;
				xmlRespElem = xmlResp.firstChild.firstChild;
			}
			if(popupLayer != "AlternateAddrLayer" && popupLayer != "NoAltAddrLayer" && popupLayer != "InvalidAddrLayer")
				return true;
			else
			{	if (!xmlRespElem) 
					return true;
				var realTimediv = x$('realTime');
				if(isNetScape == true)
					var decodedHTML = msdnHtmlDecode('' + xmlRespElem.textContent);
				else
					var decodedHTML = msdnHtmlDecode('' + xmlRespElem.text);				
				realTimediv.innerHTML = decodedHTML;
				showModalPop(x$(popupLayer), false);
			}
		}
	}
	
	me.onResponseReceived = function()
	{	
	try
		{	me.readyState = me.ajaxObj.checkReadyState()
			if (me.readyState == "ok")
			{	if (me.shouldParseResponseXML)
				{	var response = me.ajaxObj.request.responseText;
					//call the method to parse the responses
					validationSuccess = me.parseResponseXML(response);	
				}
				if (me.callBackFunction)  
					me.callBackFunction();		
			}
			else if (me.readyState == "error")
			{	if (me.shouldDisplayDefaultError){
					//display default error message	
				}
				if (me.callBackFunction)  me.callBackFunction();
			}
		}
		catch(err)
		{ x$('realTime').innerHTML='';SubmitForm();}
	}
	me.showWaitStatus = function()
  {  window.status = "Sent the request. Awaiting response..."  }
  me.clearWaitStatus = function()
  {   window.status = "Done."  }
}

function AddressValidationCallback()
{	
var numForms = address1Array.length;	
	if(validationFormNumber < numForms-1)
	{	if(validationSuccess)
		{	ResetRTAVValidationCycle();
		    validationFormNumber = validationFormNumber + 1;			
			RealTimeAddressValidation();
		}
	}
	else
	{	if(validationSuccess)
	    {
	        validationFormNumber =0;
	        ResetRTAVValidationCycle();
			SubmitForm();
		}
	}
}

function RealTimeAddressValidation(UserAction)
{  
	if(typeof isRTAVEnabled == 'undefined' || isRTAVEnabled!='TRUE')
	{
		SubmitForm();
		return true;
	}
	if (UserAction == null)
	    UserAction = "0";	
	DisableSubmitButton();
	validationCountArray[validationFormNumber] = validationCountArray[validationFormNumber] + 1;	
	var ShippingName;
	if(ShippingNamesArray.length>0)
	{	ShippingName = ShippingNamesArray[validationFormNumber];
		SendAddress(UserAction, address1Array[validationFormNumber].value,address2Array[validationFormNumber].value,cityArray[validationFormNumber].value,stateArray[validationFormNumber].value,zipArray[validationFormNumber].value + zip4Array[validationFormNumber].value, validationCountArray[validationFormNumber], ShippingName);
	}
	else
	{if(typeof zip4Array[validationFormNumber] == 'undefined'){
		SendAddress(UserAction, address1Array[validationFormNumber].value,address2Array[validationFormNumber].value,cityArray[validationFormNumber].value,stateArray[validationFormNumber].value,zipArray[validationFormNumber].value , validationCountArray[validationFormNumber]);
	 }else{
		SendAddress(UserAction, address1Array[validationFormNumber].value,address2Array[validationFormNumber].value,cityArray[validationFormNumber].value,stateArray[validationFormNumber].value,zipArray[validationFormNumber].value + zip4Array[validationFormNumber].value, validationCountArray[validationFormNumber]);
	 }
	}
}

function popupSubmit(recommended, labelID)
{
//alert('in popup submit');
	if (!recommended)
	{   
	//alert('in !recommended');
	if(validatePopUp())
		{	
		//alert('in if after validate popup');
		var srcAddress1 = x$("RTAVaddress1");
			var srcAddress2 = x$("RTAVaddress2");
			var srcCity = x$("RTAVcity");
			var srcState = x$("RTAVstate");
			var srcZip = x$("RTAVzip");
			var srcZip4=x$("RTAVzip4");
			address1Array[validationFormNumber].value = srcAddress1.value;
			address2Array[validationFormNumber].value = srcAddress2.value;
			cityArray[validationFormNumber].value = srcCity.value;
			stateArray[validationFormNumber].value = srcState.value;
			zipArray[validationFormNumber].value = srcZip.value;
			if(typeof zip4Array[validationFormNumber] != 'undefined')
				zip4Array[validationFormNumber].value = srcZip4.value;
			RealTimeAddressValidation("2");
			hideModalPop();
		}
	}
	else
	{	
	//alert('in the else');
	//alert('labelID : ' + labelID);
	var recommendedAddressLabel = x$(labelID);
	//recommendedAddressLabel = GetElement(labelID, 'hidden');
	    var recommendedAddress;
	    var temp = new Array();
	    if(isNetScape == true)
	    {
		//alert('it isnetscape');
	        recommendedAddress = recommendedAddressLabel.value; //was recommendedAddressLabel[0].value
	        recommendedAddress = recommendedAddress.replace(/<span class="red11">/g,'');
	        recommendedAddress = recommendedAddress.replace('</span>','');
	        temp = recommendedAddress.split('<br>');
	    }
	    else
	    {
		//alert('not netscape');	
		//alert('recommendedAddressLabel[0].value : ' + recommendedAddressLabel[0].value);
	        recommendedAddress = recommendedAddressLabel.innerText; //recommendedAddressLabel[0].value; 
		//alert('recommendedAddress : ' + recommendedAddress);
	        temp = recommendedAddress.split('\r\n');    
			//temp = recommendedAddress.split('<br>');
	    }		
			//alert('temp.length : ' + temp.length);
			//alert('temp[0] : ' + temp[0]);
		if(temp.length>=2)
		{	
		//alert('temp[0] : ' + temp[0]);
		//alert('temp[1] : ' + temp[1]);
		//alert('temp[2] : ' + temp[2]);
		    address1Array[validationFormNumber].value = temp[0];	
			var temp1 = new Array();
			if(temp.length>3)
			{   address2Array[validationFormNumber].value = temp[1];
			    cityArray[validationFormNumber].value = temp[2];	
			    temp1 = temp[3].split(' ');
			}	
			else
			{   address2Array[validationFormNumber].value = "";
			    cityArray[validationFormNumber].value = temp[1];	
			    temp1 = temp[2].split(' ');
			}			
			stateArray[validationFormNumber].value = temp1[0];
			var tempzip = new Array();
			tempzip = temp1[1].split('-');	
			zipArray[validationFormNumber].value = tempzip[0];
			if(tempzip.length>1)
			{	if(typeof zip4Array[validationFormNumber] != 'undefined')
				{	zip4Array[validationFormNumber].value = tempzip[1];
				}
			}
			else
			{	if(typeof zip4Array[validationFormNumber] != 'undefined')
				{	zip4Array[validationFormNumber].value = '';
				}
			}
		}
		//alert('before the hidemodalpop');
		hideModalPop();
		validationSuccess = true;
		UpdateUserAction(recommendedAddress);
		AddressValidationCallback();
	}
}

function validatePopUp()
{
//alert('Enter validatePopUp');
	var requiredValidators=[];
	requiredValidators["Address1"]="Please Enter the Address";
	requiredValidators["City"]="Please Enter the city";
	requiredValidators["State"]="Please select the state";
	requiredValidators["zip"]="Please Enter the zip code";
	requiredValidators["zipInvalid"]="Please Enter a valid zip code";
	//alert('after validators');
	if(x$('RTAVaddress1').value=="")
	{	x$('ReqFieldsError').innerHTML=requiredValidators["Address1"];
		return false;
	}
	else
	{	if(x$('RTAVcity').value=="")
		{	x$('ReqFieldsError').innerHTML=requiredValidators["City"];
			return false;
		}
		else if(x$('RTAVstate').value=="")
		{	x$('ReqFieldsError').innerHTML=requiredValidators["State"];
			return false;
		}
		else
		{	var regularexp=/^[0-9]{5}$/;
			var ZipStr = x$('RTAVzip').value ;
			if(x$('RTAVzip').value=="")
			{	x$('ReqFieldsError').innerHTML=requiredValidators["zip"];
				return false;
			}
			else if(!ZipStr.match(regularexp))
			{	x$('ReqFieldsError').innerHTML=requiredValidators["zipInvalid"];
				return false;
			}
			else if(x$('RTAVzip4').value!="")
			{	var regularexpZip4=/^[0-9]{4}$/;
				var ZipStr4 = x$('RTAVzip4').value ;
				if(!ZipStr4.match(regularexpZip4))
				{	x$('ReqFieldsError').innerHTML=requiredValidators["zipInvalid"];
					return false;
				}
				else 
				return true;
			}
			else 
				return true;
		}
	}
}

function RequestTimedOut()
{ 
SubmitForm();}

function ClosePopupLayer(ResetValidationCount)
{ 
  hideModalPop();
  if(ResetValidationCount)
  { ResetRTAVValidationCycle();}  
  validationFormNumber = 0;
}

function ResetRTAVValidationCycle()
{
    validationCountArray[validationFormNumber] = 0;
	var cycleID = x$('hidRTAVCycleID');
	if(cycleID)
	    RTAVCycleIDArray[validationFormNumber] = cycleID.value;
}

function UpdateUserAction(recommendedAddress)
{  
 var ajax = new Ajax();
    var currentURL = window.location.href;
	_postURL = currentURL.substring(0,currentURL.toLowerCase().indexOf('/account/'));//https://www.gevalia.com/
	_postURL = _postURL + '/controls/dtc/common/realtimecontroller.aspx';
    //_postURL = currentURL.substring(0,currentURL.toLowerCase().indexOf('/gevalia/'));
    //_postURL = _postURL + '/Gevalia/common/realtimecontroller.aspx';
    if (window.location.href.indexOf('https:')==0 && _postURL.indexOf('http:')==0)
        _postURL = _postURL.replace('http:','https:');
    validationCountArray[validationFormNumber] = validationCountArray[validationFormNumber] + 1;
    userAction = '1';
    var sFormData="UserAction=" + userAction + "&cycleNumber=" + RTAVCycleIDArray[validationFormNumber] + "&recommendedAddress=" + recommendedAddress + "&sourcePage=" + currentURL + "&validationCount=" + validationCountArray[validationFormNumber];
    ajax.makeRequest('POST', _postURL, {}, sFormData);
}

/*function GetElement(DivID, type)
{
var elementDiv;
elementDiv = document.getElementById(DivID);
var r = new Array();

if (elementDiv != null)
{
	var elms = elementDiv.childNodes;
	var c;

	for(var i = 0, maxI = elms.length; i < maxI; ++i) {
		var elm = elms[i];
		//there should only ever be one text element with an id in a given div
		if (elm.type == type && elm.id != 'undefined'){
			c = elm.id;
			
			var t;
			var p;
			var f;			
			//var re = new RegExp("(^|\\s)"+c+"(\\s|$)");
			var e = xTag$(t,p); // See xml comments.
			for (var i = 0; i < e.length; ++i) {
				var sCID = xGetAttr(e[i], 'id');
				if (sCID == c) {
				  r[r.length] = e[i];
				  if (f) f(e[i]);
				}
			}
			if (r == null)
			{
				r = new Array();
			}
			return r;
		}        
	}
}
return r;
}*/
