First thing i see that needs to be changed is your assigining unchecked values to your input fields. Try wrapping isset round the variable before echoing, this will stop errors if they are not assigned or empty.
Second thing as you have passed a post id to get_post_custom() you dont need the second array.
function basin_manager_meta_options(){
global $post;
if ( defined('DOING_AUTOSAVE') && DOING_AUTOSAVE )
return $post_id;
$custom = get_post_custom($post->ID);
if(isset($custom["source"])){
$source= $custom["source"];
}
$author= $custom["author"];
$date= $custom["date"];**
?>
<style type="text/css">
<?php include('basin-manager.css'); ?>
</style>
<div class="basin_manager_extras">
<?php
$website= ($website == "") ? "http://" : $website;
?>
<div><label>Website / Gazete ? :</label>
<input name="source" value="<?php echo isset($source) ? source : ''; ?>" />
</div>
<div><label>Yazar:</label>
<input name="author" value="<?php echo isset($author) ? $author : ''; ?>" />
</div>
<div><label>Date:</label>
<input name="date" value="<?php echo isset($date) ? $date : ''; ?>" />
</div>
<?php
}
add_action('save_post', 'basin_manager_save_extras');
function basin_manager_save_extras(){
global $post;
if ( defined('DOING_AUTOSAVE') && DOING_AUTOSAVE ){
//if you remove this the sky will fall on your head.
return $post_id;
} else {
update_post_meta($post->ID, "source", $_POST["source"]);
update_post_meta($post->ID, "author", $_POST["author"]);
update_post_meta($post->ID, "date", $_POST["date"]);
}
}