/*
 * Coder: Mario Hartmann [mario@hartmann.net // http://mario.hartmann.net/]
 * Copyright: 2006, Photocolor Kreuzlingen AG
 * Original version: Javascipt
 * Original product name: Photocolor Kreuzlingen AG  -AddressValidator (async)-
 * Official site: http://www.Ifolor.ch
 * Last updated Date: 11-JAN-2006
 * Derivate works, translation in other languages
 * of this code must retain this copyright notice.
*/
// -----------------------------------------------------af
//

function AddressValidatorEntry(ctlId,minChars,maxChars,errorCss)
{
	this.Name = ctlId;
	this.CtlId = ctlId;
	this.MinChars = minChars;
	this.MaxChars = maxChars;
	this.ErrorCss = errorCss;
	this.Ctl = GetControl(this.CtlId);
	this.Css = this.Ctl.className;
	this.Text = this.Ctl.value;
	this.IsEmail =false;
	this.IsMobile =false;
	this.IsCity =false;
	this.IsRegExp =false;
	this.PostalCodeName=null;
	this.CountryCodeCtl=null;
	this.CitySelectCtl=null;
	this.MobileSelectCtl=null;
	this.MobileRequiredCtl=null;
	this.RegExp=null;
}
// -----------------------------------------------------av
//
function AddressValidator(validateUrl,messageCtlId,ddMessageBoxCtlId,buttonCtlId)
{
	this.AddressData = new Array();
	this.ButtonCtl = null;

	this.DDMessageBoxCtlId = null;
	
	this.ValidateUrl = validateUrl;
	this.MessageCtl = GetControl(messageCtlId);
    
	_av = this;

    this.ButtonCtl = GetControl("btn_submit");
    
	this.ButtonCtl.onclick = function() {
		    ToggleControlWithId("btn_submit");
	        ToggleControlWithId("div_please_wait");
	        return(_av.Validate())
	    };
	
	if (ddMessageBoxCtlId){this.DDMessageBoxCtlId= ddMessageBoxCtlId;}
}
// -----------------------------------------------------av
//
AddressValidator.prototype.AddEntry = function(ctlId, minChars,maxChars,errorCss)
{
	this.AddressData[ctlId.toLowerCase()]= new AddressValidatorEntry(ctlId,minChars,maxChars,errorCss);
}
// -----------------------------------------------------av
//
AddressValidator.prototype.AddEmail = function(ctlId, minChars,maxChars,errorCss)
{
	this.AddressData[ctlId.toLowerCase()]= new AddressValidatorEntry(ctlId,minChars,maxChars,errorCss);
	this.AddressData[ctlId.toLowerCase()].IsEmail=true;
}
// -----------------------------------------------------av
//
AddressValidator.prototype.AddRegularExpression = function(ctlId,regExp,minChars,maxChars,errorCss)
{
	this.AddressData[ctlId.toLowerCase()]= new AddressValidatorEntry(ctlId,minChars,maxChars,errorCss);
	this.AddressData[ctlId.toLowerCase()].IsRegExp=true;
    this.AddressData[ctlId.toLowerCase()].RegExp=regExp;
}
// -----------------------------------------------------av
//
AddressValidator.prototype.AddCity = function(cityCtlId,citySelectCtlId,postalCodeName,countryCode, minChars,maxChars,errorCss)
{
	this.AddressData[cityCtlId.toLowerCase()]= new AddressValidatorEntry(cityCtlId,minChars,maxChars,errorCss);
	this.AddressData[cityCtlId.toLowerCase()].IsCity=true;
	this.AddressData[cityCtlId.toLowerCase()].PostalCodeName=postalCodeName.toLowerCase();
	this.AddressData[cityCtlId.toLowerCase()].CountryCode=countryCode;
	_citySelCtl = GetControl(citySelectCtlId);
	this.AddressData[cityCtlId.toLowerCase()].CitySelectCtl=_citySelCtl;
	_citySelCtl.style.visibility="hidden";
	_citySelCtl.origHeight=_citySelCtl.style.height;
	_citySelCtl.origWidth=_citySelCtl.style.width;
	_citySelCtl.style.height="0px";	
	_citySelCtl.style.width="0px";
	
}
// -----------------------------------------------------av
//
AddressValidator.prototype.AddMobile = function(mobileCtlId,preMobileSelectCtlId,mobileRequiredCtl,minChars,maxChars,errorCss)
{
	this.AddressData[mobileCtlId.toLowerCase()]= new AddressValidatorEntry(mobileCtlId,minChars,maxChars,errorCss);
	this.AddressData[mobileCtlId.toLowerCase()].IsMobile=true;
	_preMobileSelCtl = GetControl(preMobileSelectCtlId);
	this.AddressData[mobileCtlId.toLowerCase()].MobileSelectCtl=_preMobileSelCtl;
	if(mobileRequiredCtl != "") {
    	_mobileRequiredCtl = GetControl(mobileRequiredCtl);
	    this.AddressData[mobileCtlId.toLowerCase()].MobileRequiredCtl=_mobileRequiredCtl;
	}
}// -----------------------------------------------------av
//
AddressValidator.prototype.Validate = function()
{

    Debug("validate");
	_validateXml = "<Photocolor>";
	for(var _entry in  this.AddressData) 
	{
		_data = 	this.AddressData[_entry];
		Debug(_entry);
		_validateXml+= "<"+_data.Name +" ";
		if (_data.IsCity){_validateXml+=" isCity='True' postalCode='" +this.AddressData[_data.PostalCodeName].Ctl.value + "' countryCode='" +_data.CountryCode +"'";}
		else if (_data.IsRegExp){_validateXml+=" isRegExp='True' regExp='" + _data.RegExp +"'";}
        else if (_data.IsMobile)
        {
            if(_data.MobileRequiredCtl != null)
                _validateXml+=" isMobile='True' preMobileNumber='" + _data.MobileSelectCtl.value + "' mobileRequiredValue='" + _data.MobileRequiredCtl.checked + "'";
            else
                _validateXml+=" isMobile='True' preMobileNumber='" + _data.MobileSelectCtl.value + "'";            
        }		
		else if (_data.IsEmail){_validateXml+=" isEmail='True'";}
		_validateXml+=" max='"+_data.MaxChars+"' min='"+_data.MinChars+"'><![CDATA[";
		_validateXml+=encodeURIpck(_data.Ctl.value);
		_validateXml+="]]></"+_data.Name+">";
	}
	_validateXml += "</Photocolor>";
	var _this = this;
	var _pckCbo = new CallBackObject();
	_pckCbo.ShowLoading=true;	
	_pckCbo.OnComplete = function(responseText, responseXml){_this.ValidateResponse(responseText, responseXml);};
	_pckCbo.AddParam("validate",_validateXml); 
	_pckCbo.DoPostCallback (this.ValidateUrl + window.location.search);
	return false;
}
// -----------------------------------------------------av
//
AddressValidator.prototype.ValidateResponse = function (retText,retXml)
{
	_retPCK = retXml.getElementsByTagName("Photocolor")[0];
	_errMessage = _retPCK.getAttribute("errorMessage");
	_errTitle = _retPCK.getAttribute("errorTitle");
	
	var _retNode = _retPCK.getElementsByTagName("Address")[0].firstChild;
	while (_retNode != null) 
	{
		_retNodeValue = _retNode.getAttribute("value");
		_retNodeErrTitle = (_retNode.getAttribute("errorTitle")!=null)?_retNode.getAttribute("errorTitle"):'';
		_retNodeErrMessage = (_retNode.getAttribute("errorMessage")!=null)?_retNode.getAttribute("errorMessage"):'';	
 		_data = 	this.AddressData[_retNode.nodeName.toLowerCase()];
 		if (_retNodeValue != null)
 		{
			if (_data.IsCity)	
			{  //remove all entries
				while(_data.CitySelectCtl.length > 0){_data.CitySelectCtl.options[_data.CitySelectCtl.length - 1] = null;}
				_data.CitySelectCtl.style.visibility='hidden';
				//_data.CitySelectCtl.style.height="0px";
				//_data.CitySelectCtl.style.width="0px";
			}
			if(_retNodeErrTitle.length >0 || _retNodeErrMessage.length >0 ) 
			{
				_data.Ctl.className = _data.ErrorCss;
				_data.Ctl.value = _retNodeValue;
				_data.Ctl.title = (_retNodeErrMessage.length >0)?_retNodeErrMessage:_retNodeErrTitle;
				
				if (this.DDMessageBoxCtlId )
				{
					if((_retNodeErrTitle.length>0&&_errMessage.indexOf(_retNodeErrTitle)==-1)||(_retNodeErrMessage.length>0&&_errMessage.indexOf(_retNodeErrMessage)==-1)){_errMessage+= "<br>";}
					if(_retNodeErrTitle.length>0&&_errMessage.indexOf( _retNodeErrTitle)==-1){_errMessage+=_retNodeErrTitle+"<br>";}
					if(_retNodeErrMessage.length>0&&_errMessage.indexOf( _retNodeErrMessage)==-1){_errMessage+=_retNodeErrMessage+"<br>";}
				}

				if (_data.IsCity)
				{
					_postalCodeData = this.AddressData[_data.PostalCodeName];
					_postalCodeData.Ctl.className = _postalCodeData.ErrorCss;
					_postalCodeData.Ctl.title = (_retNodeErrMessage.length >0)?_retNodeErrMessage:_retNodeErrTitle;
                    temp1 = _data.CitySelectCtl.id;
                    temp2 = _data.CtlId;
					_data.CitySelectCtl.onchange=function(){ChangePostalCity(temp1,_postalCodeData.CtlId,temp2)};

					//add new entries
					var _cityListNode ;
					if ( _retPCK.getElementsByTagName("CityList")[0]!=null)
						_cityListNode = _retPCK.getElementsByTagName("CityList")[0].firstChild;					
					
					while (_cityListNode != null) 
					{
							_cityPostalValue = _cityListNode.getAttribute("postalCode");
							_cityNameValue = _cityListNode.getAttribute("name");
							_cityListEntry = new Option(_cityPostalValue+ "   " +_cityNameValue  , _cityPostalValue+ "|" +_cityNameValue ,false, true);
							
							_data.CitySelectCtl.options[_data.CitySelectCtl.length] = _cityListEntry;					
							_cityListNode = _cityListNode.nextSibling;
					}
					_data.CitySelectCtl.style.visibility=(_data.CitySelectCtl.length>1)?'visible':'hidden';
					// needed for ReshowSelectBoxes !!!
					_data.CitySelectCtl.wasVisible = true;
					//_data.CitySelectCtl.style.height=_data.CitySelectCtl.origHeight;
					//_data.CitySelectCtl.style.width=_data.CitySelectCtl.origWidth;
					
					_data.CitySelectCtl.style.height=_data.CitySelectCtl.origHeight;
					_data.CitySelectCtl.style.width=_data.CitySelectCtl.origWidth;;
				}
			}
			else
			{
				_data.Ctl.className = _data.Css;
				_data.Ctl.title = '';
			}
			_retNode = _retNode.nextSibling;
		}
	}
	if (_retPCK.getAttribute("addressIsOk")!="True")
	{
		if (this.DDMessageBoxCtlId)
		{
			if(_errTitle.length>0){GetControl(this.DDMessageBoxCtlId +"_Title").innerHTML=_errTitle;}
			GetControl(this.DDMessageBoxCtlId +"_Message").innerHTML=_errMessage;
			ShowDDMsgBox(this.DDMessageBoxCtlId, '',true);		
		}
		else if (this.MessageCtl)
		{
			if(_errTitle.length >0 ){this.MessageCtl.innerHTML =  _errTitle+"<br>";}
			if(_errMessage.length >0 ){this.MessageCtl.innerHTML =  _errMessage+"<br>";}
		}
		else{alert(_errMessage);}
		
	    ToggleControlWithId("btn_submit");
		ToggleControlWithId("div_please_wait");
	}
	else
	{
	    var theForm = document.forms['PCKForm'];
	    
        if (!theForm) 
            theForm = document.PCKForm;
	    
	    theForm.__EVENTTARGET.value = "btn_submit";
	    theForm.__EVENTARGUMENT.value = "";
	    theForm.submit();
	}
}
// -----------------------------------------------------
// end
// -----------------------------------------------------