<?
class address {

function getAddresses($target_type,$target_id,$types='') {

	global $dbi,$geo;

	if($types) {
		if(is_array($types)) $types=implode(",",$types);
		$where="and type in($types)";
	}

	$sql="select id,type,name,city,street,zipcode,state,country_code as ccode from address ".
		"left outer join address_type on address_id=id ".
		"where target_type='$target_type' and target_id='$target_id' and not inactive $where";
	$res=sql_query($sql,$dbi);
	while($a=sql_fetch_assoc($res,$dbi)) {
		$country=$this->getCountryData($ccode);
		$a[country]=$country[name];
		if(is_object($geo)) $a[city]=$geo->getGeoDataByItem($a[city]);
		$data[]=$a;
	}

	return $data;
}

/**
 * get address
 *
 * @param integer $address_id user address id
 * @return array
 */
function getAddress($address_id) {
	global $dbi,$geo;

	$sql="select name,country_code,state,city,street,zipcode from address where id='$address_id'";
	$res=sql_query($sql,$dbi);
	$a=sql_fetch_assoc($res,$dbi);
	$u=new user();
	$country=$this->getCountryData($ccode);
	$a[country]=$country[name];
	if(is_object($geo)) $a[city]=$geo->getGeoDataByItem($a[city]);

	return $a;
}

function getCountryData($ccode){
	global $dbi;
	$sql="select name,charset from country where code='$ccode'";
	$res=sql_query($sql,$dbi);
	if(list($name,$charset)=sql_fetch_array($res,$dbi)){
		$country=array(name=>$name,charset=>$charset);
	}
	return $country;
}

function saveNewAddress($post) {
	global $dbi;
	extract($post);

	$sql="insert into address (target_type,target_id,name,country_code,state,city,street,zipcode) values ('$target_type','$target_id','$name','$country_code','$state','$city','$street','$zipcode')";
	sql_query($sql,$dbi);

	$sql="select max(id) from address";
	$res=sql_query($sql,$dbi);
	list($id)=sql_fetch_array($res,$dbi);

	$this->saveAddressTypes($id,$type); // $type: t�mb
}
function updateAddress($post){
	global $dbi;
	extract($post);

	$sql="update address set country_code='$country_code', city='$city', street='$street', zipcode='$zipcode' where id='$id'";
	sql_query($sql,$dbi);

	$sql="delete from address_type where address_id='$id'";
	sql_query($sql,$dbi);

	$this->saveAddressTypes($id,$type);
}
function saveAddressTypes($address_id,$types) {
	global $dbi;
	foreach($types as $v) {
		$sql="insert into address_type (address_id,type) values ('$address_id','$v')";
		sql_query($sql,$dbi);
	}
}

function deleteAddress($id){
	global $dbi,$ws;

	if($ws) {
		$sql="select id from webshop_order where address_shipment='$id' limit 1";
		$res=sql_query($sql,$dbi);
	}
	if($ws || @sql_num_rows($res,$dbi)) {
		$sql="update address set inactive=1 where id='$id'";
		sql_query($sql,$dbi);
	}else{
		$sql="delete from address where id='$id'";
		sql_query($sql,$dbi);
		$sql="delete from address_type where address_id='$id'";
		sql_query($sql,$dbi);
	}
}

function saveAddressesGrouped($post) {
	global $dbi;
	extract($post);

	foreach($address_type as $i=>$at) {
		if($address[disabled][$i]) continue;

		// ha egyezik az el�z� c�mmel akkor csak a t�pust vegye f�l
		$equal = $i &&
			$address[name][$i] == $address[name][$i-1] &&
			$address[city][$i] == $address[city][$i-1] &&
			$address[street][$i] == $address[street][$i-1] &&
			$address[zipcode][$i] == $address[zipcode][$i-1];

		if(!$equal) {
			$sql="insert into address (target_type,target_id,name,city,street,zipcode) ".
				"values ('$target_type','$target_id','{$address[name][$i]}','{$address[city][$i]}','{$address[street][$i]}','{$address[zipcode][$i]}')";
			sql_query($sql,$dbi);

			$sql="select max(id) from address";
			$res=sql_query($sql,$dbi);
			list($aid)=sql_fetch_array($res,$dbi);
		}

		$sql="insert into address_type (address_id,type) values ('$aid','$at')";
		sql_query($sql,$dbi);
	}
}

function updateAddressesGrouped($post) {
	// disabled-es update (l�sd: bcsite reg) m�g nincs megoldva
	global $dbi;
	extract($post);

	// van-e m�r egy�ltal�n t�rolt c�m
	foreach($address_id as $aid) if($aid) $is_old=true;

	// �sszehasonl�tja a post-ot a t�rolt �rt�kekkel...
	if($is_old) {
		foreach($address_type as $i=>$at) {
			foreach($address as $field=>$values)
				if($address_old[$field][$i]!=$values[$i]) {$changed=true; break;}
			if($changed) break;
		}
	}

	// ...ha elt�r�s van t�rl�s �s �jrafelv�tel
	if(!$is_old || $changed) {
		if($changed) foreach($address_id as $aid) $this->deleteAddress($aid);
		$this->saveAddressesGrouped($post);
	}
}



}

?>