var zipAR = new Array();
var regionAR = new Array();
var regionLAR = new Array();
var regionRAR = new Array();
var formCounter = -1;
(function($) {
  $.fn.countryList = function(regionLabel, regionSelect, zip, regionRow) {
  		//$(zip).hide();
  		formCounter+=1;
  		zipAR[formCounter]=zip;
  		regionAR[formCounter]=regionSelect;
  		regionLAR[formCounter]=regionLabel;
  		regionRAR[formCounter]=regionRow;
		return $(this).attr("ct", ""+formCounter).bind('change', function(){
			if($(this).val() == ""){
				$(zipAR[formCounter]).hide();
				$(regionAR[formCounter]).hide().empty();
				$(regionLAR[formCounter]).html("State");
				$(regionRAR[formCounter]).hide();
				return;
			}
			 var xmlDocument = new StringBuffer();
			 xmlDocument.append("xml=<request name='getCountry' reqid='",$(this).attr("ct"),"'><country code='",$(this).val(),"' /></request>&SSL_ENABLED=false");
			 $.ajax({
			   url: $.swim.uris.getUrl("addressBridge"),
			   processData: false,
			   data: xmlDocument.toString(),
			   success: function(xml){
			   		var idstr = xml.getElementsByTagName("response")[0].getAttribute("reqid");
			   		var id = 0;
			   		if(idstr != null){
			   			id = parseInt(idstr);
			   		}
			   		var zipEL = zipAR[id]; 
			   		var regionEL = regionAR[id];
			   		var regionLEL = regionLAR[id];
			   		var regionREL = regionRAR[id];
			       var countries = xml.getElementsByTagName("country");
			       if(countries.length > 0){
				       	var country = countries[0];
				       	var zip = country.getAttribute("zip");
				       	var rLabel = country.getAttribute("rLabel");
				       	if(""+zip == "false"){
				       		$(zipEL).hide();
				       	}else{
				       		$(zipEL).show();
				       	}
				       	var regions = country.getElementsByTagName("region");
				       	if(""+rLabel == "false" || regions.length == 0){
				       		$(regionEL).hide().empty();
				       		$(regionREL).hide();
				       	}else{
				       		var oldVal = $(regionEL).val();
				       		var sthold = $(regionEL).attr("st");
				       		$(regionEL).attr("st", "");
				       		if(sthold && sthold.length > 0){
				       			oldVal = sthold;
				       		}
				       		var html = new StringBuffer();
				       		for(var i = 0; i < regions.length;i++){
				       			var region = regions[i];
				       			html.append("<option value='",region.getAttribute("code"),"' ");
				       			//if(i == 0) html.append("selected='selected' ");
				       			html.append(">",region.getAttribute("name"),"</option>");
				       		}
				       		$(regionEL).show().empty().html(html.toString()).val(oldVal);
				       		$(regionLEL).html(rLabel).show();
				       		$(regionREL).show();
				       	}
			       }
			   }
			 });
		}).trigger('change');
  };
})(jQuery);

$.swim.addresses = {domain:true, title:"Address Objects & Methods."};
$.swim.addresses.AddressFromCookie = function(cookieVal){
	var ret = new $.swim.addresses.Address();
	var array = cookieVal.split(',');
	for(var i in array){
		var nameVal = array[i].split(":");
		ret[nameVal[0]] = nameVal[1];
	}
	ret.clean();
	return ret;
}
$.swim.addresses.AddressFromXML = function(xmlNode){
	if(xmlNode != null){
		return new $.swim.addresses.Address(
			$(xmlNode).attr('fname'),
			$(xmlNode).attr('lname'),
			$(xmlNode).attr('emailAddr'),
			$(xmlNode).attr('address'),
			$(xmlNode).attr('address2'),
			$(xmlNode).attr('city'),
			$(xmlNode).attr('country'),
			$(xmlNode).attr('state'),
			$(xmlNode).attr('zip'),
			$(xmlNode).attr('phone')
		);
	}
}
$.swim.addresses.Address = function(
			pFName, pLName, pEmail,
			pStreet1, pStreet2, pCity,
			pCountry, pState, pZip,
			pPhone){
	var ret = {
		fname: 		pFName	,
		lname: 		pLName	,
		email: 		pEmail	,
		address:	pStreet1,
		address2:	pStreet2,
		city: 		pCity	,
		country: 	pCountry,
		state: 		pState	,
		zip: 		pZip	,
		phone: 		pPhone  ,
		
		clean:function(){
			for (var i in this){
				if(this[i] == null || ""+this[i] == "undefined") this[i] = "";
			}
		},
		
		isAttr:function(key){
			if(key == null || key.trim().length < 1) return false;
			return (typeof this[key]+"" == "string");
		},
		
		clone:function(){
			var ret = new $.swim.addresses.Address();
			for(var i in this){
				if(this.isAttr(i)) ret[i] = this[i];
			}
			ret.clean();
			return ret;
		},
		
		toCookie:function(){
			var out = new StringBuffer();
			var comma = false;
			for (var i in this){
				if(this.isAttr(i)){
					if(comma) out.append(",");
					out.append(i, ":", this[i]);
					comma = true;
				}
			}
			return out.toString();
		},
		
		toAttributes:function(){
			var out = new StringBuffer();
			for (var i in this){
				if(this.isAttr(i)){
					out.append(i, "=\"", this[i], "\" ");
					comma = true;
				}
			}
			return out.toString();
		},
		
		toParams:function(){
			var out = new StringBuffer();
			var amp = false;
			for (var i in this){
				if(this.isAttr(i)){
					if(comma) out.append("&");
					out.append(i, "=", encodeURI(this[i]));
					comma = true;
				}
			}
			return out.toString();
		}
	};
	ret.clean();
	return ret;
}



